Anda di halaman 1dari 4

Análise de Performance no Gnu/Linux com ifstat, vmstat, dstat, uptime, iostat, procinfo …

A Análise do Desempenho e a Solução de Problemas é um dos maiores desafios dos Administradores de Sistemas e
acarretam perguntas frequentes em listas de discussão. Fiz um aparato de alguns comandos pouco usados, mas
bastante úteis para se obter um diagnóstico do sistema.

O Unix nos provê uma série de ferramentas que podem ser utilizadas para esta tarefa e que nos fornecem
informações preciosas sobre como anda o nosso sistema em termos de performance e para diagnosticar problemas
atuais e até mesmo nos precaver para futuros.

Os comandos aqui utilizados existem em todas as distribuições e em outras plataformas Unix como Solaris, FreeBSD
e HPUX.

Estou utilizando o Debian Sarge para mostrar as saídas dos comandos e, portanto, a saída pode variar um pouco em
outras distribuições, todavia o conceito é mesmo.

Primeiramente verifique se você possui os pacotes abaixo:

dstat - versatile resource statistics tool


ifstat - InterFace STATistics Monitoring
tcpstat - network interface statistics reporting tool
sysstat - sar, iostat and mpstat - system performance tools for Linux
systune - kernel tuning through the /proc file system
procinfo - Displays system information from /proc

O Desempenho de um Sistema é determinado pela eficiência que os recursos do sistema são alocados e
compartilhados, e podemos citar como os mais importantes recursos que tem efeito sobre o desempenho:

* Tempo de CPU
* Memória
* Largura de banda de E/S do disco rígido
* Largura de banda de E/S de rede

Todos os processos consomem uma parte dos recursos do sistema. Se ainda restarem recursos depois que os
processos ativos levarem o que queriam, o desempenho do sistema é quase tão bom quanto poderá ser.

Vamos analisar alguma ferramentas:

1) vmstat –> Imprime um variedade de informações referentes ao uso da CPU, Memória, Processos, Paginação e IO.

root@Zen-La:~# vmstat -S M 1 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 0 40 47 656 0 0 223 789 478 903 42 7 32 18
0 0 0 40 47 656 0 0 0 0 363 483 4 0 96 0
0 0 0 40 47 656 0 0 0 36 364 465 4 0 96 0
0 0 0 40 47 656 0 0 0 0 362 454 2 0 98 0
0 0 0 40 47 656 0 0 0 0 356 456 2 0 98 0

Com o comando acima, solicitei 5 medidas no intervalo de 1s e uma saída em megabytes.


A coluna procs, é dividida em r e b. Para efeitos de análise o número informado em r nunca pode ser maior do que o
dobro do número de processadores na máquina, isto é, se tens 2 processadores o numero não pode ser maior do
que 4. A coluna b mostra o numero de processos na fila, esperando para serem executados e este numero não pode
ser maior do que 0 (zero).

A coluna CPU, nos trás 3 dados interessantes: us, sy e id, respectivamente, tempo de usuário, sistema e inatividade.
Uma regra geral é de que o sistema deve gastar aproximadamente 50% do seu tempo ocioso no espaço do usuário e
50% no espaço do sistema; o percentual de inatividade nunca pode ser igual a 0, pois caso contrário terá problemas
de performance.

Outro parâmetro que deve ser analisado é a coluna swap onde os parâmetros si e só não devem ser maiores que 0
(zero) caso contrário sua maquina está fazendo swap, isto é, acabou a memória disponível e ela está paginando em
disco. O comando abaixo provê informações precisas sobre o uso da memória.

root@Zen-La:~# vmstat -s

O ideal é rodar o vmstat por um periodo de tempo superior a 1h em um dia de pico e analisar o resultado após para
verificar como anda a performance do seu sistema. Eu fiz um script que permite analizar o sistem com o uso do
vmstat e está disponível aqui, este script emite uma saida formatada com um resumo da análise do sistema pelo uso
do vmstat.

2) sar –> Informa o percentual gasto na execução de códigos no espaço do usuario (%user), espaço do sistema
(%system), processos esperando (%iowait) e tempo de inatividade (%idle).

root@Zen-La:~# sar -u 5 5
Linux 2.6.15-23-powerpc (Zen-La) 25-06-2006
16:08:22 CPU %user %nice %system %iowait %idle
16:08:27 all 0,00 0,00 0,60 0,00 99,40
16:08:32 all 1,00 0,00 0,20 0,00 98,80
16:08:37 all 0,80 0,00 1,80 0,00 97,41
16:08:42 all 0,40 0,00 0,20 0,00 99,40
16:08:47 all 20,80 0,00 0,80 0,00 78,40
Média: all 4,60 0,00 0,72 0,00 94,68

Sugiro uma olhada no arquivo man do sar para mais detalhes, pois a ferramenta é muito poderosa.

Tente: sar -r –> Informações sobre o uso da memoria e paginação.

3) uptime, top –> Uma estatistica muito útil é chamda load average do servidor. Com o uso dos comandos uptime e
top podemos ter uma amostragem do chamado load do sistema. Trata-se de uma média de carga, o numero médio
de processos executáveis, em geral mostra a média de processos que esperam a E/S de disco e rede.

root@Zen-La:~# uptime
16:17:05 up 1:05, 3 users, load average: 0.26, 0.73, 0.73

Três resultados são mostrados para tempos difrentes de amostragem: 5m, 10m e 15m. Eu já consegui trabalhar
razoavelmente bem com servidores Xeon e Opteron 64bits com medias de até 8.0, entretanto em meu laptop se a
media chegar a 2.0 ele se torna inutilizável, portanto varia muito da arquitetura do processador e de como ele trata
os processos.

Se seu servidor está fazendo Swap (swapando) provavelmente o load irá subir devido ao processo kswapd estar
tratando da paginação em disco (E/S), portanto ter pouca memória é pessimo para performance do sistema.

4) free –> O comando free possibilita verificar o uso da memória.

root@Zen-La:~# free -tm


total used free shared buffers cached
Mem: 1009 970 38 0 48 656
-/+ buffers/cache: 265 743
Swap: 476 0 476
Total: 1486 970 515

5) mpstat –> Provê informações (estatisticas) sobre um processador especifico ou todos da maquina em tempo real.

root@Zen-La:~# mpstat -P ALL 1


Linux 2.6.15-23-powerpc (Zen-La) 25-06-2006
16:35:30 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
16:35:31 all 4,00 0,00 0,00 0,00 0,00 0,00 0,00 96,00 340,00
16:35:31 0 4,00 0,00 0,00 0,00 0,00 0,00 0,00 96,00 340,00

5) iostat –> Este comando nos permite monitorar o processamento de disco e se torna muito útil para verificarmos
se o i/o em disco está sendo um gargalo na performance do sistema e partir daí determinarmos se devemos trocar
um HD IDE por um Sata ou Scsi.

Assim como o vmstat ele aceita argumentos que nos permitem dizer o intervalo das medições e quantas deve ser
feitas:

root@Zen-La:~# iostat -k 1 1
Linux 2.6.15-23-powerpc (Zen-La) 25-06-2006
avg-cpu: %user %nice %system %iowait %steal %idle
21,83 0,17 3,42 6,61 0,00 67,96
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
hda 21,92 83,20 294,90 531563 188

Se deseja ver somente as informações dos discos digite:


root@Zen-La:~# iostat -d 1 1

Se deja somente as informações do avg-cpu digite:


root@Zen-La:~# iostat -c 1 1

Para informações completas digite:


root@Zen-La:~# iostat ALL -m

DICA:> Procure sempre ter uma partição de swap para cada disco, pois caso aja necessidade de uso da Swap a
degradação do Sistema será menor.

6) procinfo –> Todo administrador que se preze deve conhecer muito bem o sistema de arquivos /proc e o comando
procinfo te permite ter um resumo das informações de uso de vários recursos do sistema em tempo real.

É possivel verificar o uso dos recursos de irq, memória, processos do espaço do usuário e sistema, load average e
muitas outras. O comando abaixo mostra todas as saidas do procinfo, inclusive mostrando os módulos do kernel que
estã sendo utilizados.

root@Zen-La:~# procinfo -a

Para ter a saída do comando em modo fullscreen e atualizado a cada 5 segundos digite:

root@Zen-La:~# procinfo -f
Sugiro que explore todas as saidas deste comando, pois após dominá-lo verá que muita dor de cabeça será
eliminada e seus diagnosticos muito mais preciso.

7) ifstat –> Fornece estatisticas de uso das Interfaces de rede em tempo real.

root@Zen-La:~# ifstat -a
lo eth0 eth1 sit0
KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out
0.00 0.00 0.00 0.00 4.43 0.00 0.00 0.00
0.00 0.00 0.00 0.00 3.31 0.00 0.00 0.00
0.00 0.00 0.00 0.00 7.00 0.00 0.00 0.00

Outros Comandos muito uteis:

dstat –> Fornece as mesmas informações do vmstat, porém em tempo real e muito bem formatada (cores e etc).
Melhor que o vmstat!!

tcpstat –> Fornece estatisticas sobre o uso das interfaces de rede. Prefiro o ifstat!!

sysctl –> permite analisar e mudar paramentros do kernel. Tome cuidado com este comando, pois normalmente
nada precisa ser mudado.

ps aux –> Verifica os processos em execução e pode mostrar quais estão consumindo mais recursos;

nice e renice –> Permite setar a prioridade de execução de um processo. É muito util quando um processo está
consumindo muita cpu e não pode ser morto, para isso diminuimos sua prioridade.

Conclusão:

Bem este foi um resumo rápido e curto de alguns comandos que podem ajudar um administrador no seu dia-a-dia
para fazer uma análise de performance e descobrir alguns problemas e gargalos em seus servidores.

Cabe dizer também, que não existe muita mágica e parametros que possam ser ajustados e chegará o momento que
deverá aposentar o servidor e/ou fazer um upgrade de hardware.

Manter o sistema atualizado, principalmente o kernel (tome cuidado com o suporte a hardware antigo, caso utilize)
é uma medida eficiente.

Anda mungkin juga menyukai