terça-feira, 27 de outubro de 2009

Análise de Performance no linux

Olá amigos da comunidade.

Hoje vou tratar de um assunto que considero importante, Análise de Performance. Esse tópico torna-se importante especialmente quando precisamos de dados para convencer um gerente ou chefe que entende muito pouco de TI a atualizar ou comprar um novo servidor.

O linux possui diversas ferramentas para que vc possa acompanhar de perto como anda o fôlego do seu servidor.

O desempenho de um sistema é verificado de acordo com a maneira com que seus recursos são alocados e compartilhados.

Os recursos que têm impacto direto no desempenho são:

Memória
CPU
E/S do HD
E/S da placa de rede.

Existem diversas ferramentas para verificação de seu servidor. As ferramentas que mais utilizo são as seguintes:

htop
vmstat
procinfo
iotop
iftop

htop --> Similar ao top essa ferramenta de linha de comando permite a visualização dos processos e qual o consumo de recurso dos mesmos.
Para acioná-la basta digitar htop no terminal.

No canto superior da tela é possível ver informações de uso de memória, CPU e swap. As informações exbidas podem ser customizadas através do F2.

vmstat --> Essa ferramenta é bastante útil na verificação de uso de swap. Para visualizar as informações basta digitar o comando seguido das opções.
Para maiores informações quanto as opções do vmstat verifique a documentação da ferramenta.

EX:

user@destroyer:~$ vmstat -S k 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 348409 28598 12300 144695 1 9 35 26 230 546 12 2 84 2
0 0 348409 28581 12312 144814 0 0 26 38 697 1617 21 3 76 0
2 0 348409 27947 12312 144945 0 0 23 16 787 1640 19 4 77 0
1 0 348409 22237 12320 144945 0 0 0 16 665 1955 18 4 79 0
1 0 348409 27938 12320 144945 0 0 0 0 681 1487 16 4 80 0
0 0 348409 27938 12341 145252 0 0 66 6 804 2019 26 4 69 0


O comando acima vai gerar informações a cada 5 segundos sobre os recursos do sistema. A parte importante a ser verificada é a coluna swap que possui as opções si e so que correspondem a swap in e swap out.
swap in - Quantidade de memória virtual vinda do disco.
swap out - Quantidade de memória virtual indo para o disco.

O ideal seria manter os valores de si e so sendo zero, caso isso não seja possível a máquina deve funcionar bem com o valor de si e so na casa dos 30. Acima desse valor o desempenho já será bastante prejudicado.

procinfo --> Permite visualizar os recursos do sistema em tempo real com dados colhidos do diretório /proc cujo conteúde deve ser bem conhecido de todos os administradores linux. Através desse comando podemos verificar as irqs, memória, dispositivos, etc.
Para ter acesso as informações basta digitar o comando procinfo diretamente na linha de comando.

EX:

Memory: Total Used Free Buffers
RAM: 993960 975556 18404 8660
Swap: 2931820 355180 2576640

Bootup: Tue Oct 27 07:17:20 2009 Load average: 0.33 0.53 0.63 3/305 16561

user : 01:22:56.09 12.5% page in : 1386665
nice : 00:01:08.40 0.2% page out: 1002060
system: 00:16:10.55 2.4% page act: 289409
IOwait: 00:09:36.47 1.4% page dea: 414192
hw irq: 00:00:27.28 0.1% page flt: 26090361
sw irq: 00:00:11.39 0.0% swap in : 15268
idle : 09:13:21.58 83.4% swap out: 88738
uptime: 05:31:24.90 context : 23071141

irq 0: 2203479 timer irq 16: 534369 ohci_hcd:usb3, oh
irq 1: 27854 i8042 irq 17: 0 ehci_hcd:usb1
irq 4: 4 irq 18: 0 ohci_hcd:usb5, oh
irq 6: 3 floppy irq 19: 494493 ehci_hcd:usb2
irq 7: 0 parport0 irq 22: 254602 ahci
irq 8: 1 rtc0 irq 2300: 206016 eth0
irq 9: 0 acpi irq 2301: 0 fglrx[0]@PCI:1:5:
irq 12: 526037 i8042 irq 2303: 2725465 hpet2

sda 97858r 50504w sdb 0r 0w
sda1 33r 0w sdc 0r 0w
sda2 30r 0w sdd 0r 0w
sda3 3r 0w sde 0r 0w
sda5 95408r 48239w sdf 0r 0w
sda6 2363r 2265w

lo TX 1.41KiB RX 1.41KiB pan0 TX 0.00B RX 0.00B
eth0 TX 37.42MiB RX 63.99MiB



iotop --> Ferramenta bastante interessante utilizada para quantificar a E/S de aplicativos e dispositivos. A ferramenta só pode ser utilizada em kernels 2.6.20 ou mais recentes. Podemos verificar que processos estão tomando mais tempo de encrita nos dispositivos físicos, o que é muito importante para se descobrir quais aplicações estão sendo gargalos no sistema.

Ex:

iotop -o

Total DISK READ: 0 B/s | Total DISK WRITE: 60.24 K/s
PID USER DISK READ DISK WRITE SWAPIN IO> COMMAND
4685 user 0 B/s 0 B/s 0.00 % 0.00 % firefox



iftop --> O iftop é utilizado para medir a quantidade de banda consumida por determinada interface. Podemos fazer a verificação de todo o tráfego ou apenas de sub-redes ou hosts o que é importante em firewalls e roteadores linux por exemplo para verificar o quanto de banda determinado host está utilizando.
As opções da ferramenta podem ser verificadas na documentação da mesma.

EX:

iftop -npP -i eth0

iftop -npP -F 10.10.255.0/34 -i eth0 (rede)

iftop -npP -F 10.10.255.10/32 -i eth0 (host)



É isso ai galera, quaisquer dúvidas ou sugestões estou a disposição.
Grande abraço.

quarta-feira, 14 de outubro de 2009

Data e hora no history

Essa dica é bem legal em ambientes onde mais de um administrador têm acesso aos servidores linux. Muitas vezes queremos saber quando determinado comando foi rodado ou alguma alteração realizada e na maioria das vezes utilizamos o comando history para isso.

history | less

O comando nos mostra apenas os últimos comandos executados:

...
465 dpkg --listfiles clamav-base
466 dpkg --listfiles clamav
467 dpkg --listfiles clamav-freshclam
468 clear
469 rdesktop 10.10.255.17 -g 90% &
470 clear
471 ssh root@10.10.255.1
472 clear
473 ssh root@10.10.255.1
...


Nesse formato não sabemos exatamente quando os programas foram executados. Mas podemos exibir data e hora de execução dos comandos nos history alterando a variável HISTTIMEFORMAT conforme abaixo:

export HISTTIMEFORMAT="%h/%d - %H:%M:%S "

Após a alteração o comando history exibe as informações conforme abaixo:

...
78 Out/14 - 12:36:54 mount -a
79 Out/14 - 12:37:00 mount
80 Out/14 - 12:37:14 exit
81 Out/14 - 12:39:08 clear
82 Out/14 - 12:39:08 ls
83 Out/14 - 12:39:10 clear
84 Out/14 - 12:39:11 ls
85 Out/14 - 12:39:17 ls -laht
...

Para que as alterações continuem ao se reiniciar o computador basta adicionar a seguinte linha no final do arquivo /etc/bash.bashrc no Ubuntu server 9.04.

export HISTTIMEFORMAT="%h/%d - %H:%M:%S "

É isso ai galera. Um grande abraço a todos os Linux Warriors...