… BlogMind …

“Quando examino a mim mesmo e aos meus métodos de pensar, chego à conclusão que o dom da fantasia significa muito mais para mim que qualquer outro talento para pensar positiva e abstractamente.” - Albert Einstein

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 ter 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 saidas 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 abaixos:

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 podera ser.

Vamos analisar alguma ferramentas:

1) vmstat –> Imprime um variedade de informações referentes ao uso da CPU, Memoria, 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 saida 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, eperando 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 aproximandamente 50% do seu tempo ocioso no espaço do usuário e 50% no espaço do systema; 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 so não devem ser maiores que 0 (zero) caso contrário sua maquina está fazendo swap, isto é, acabou a memória disponivel e esla 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.

Abraços

 




Creative Commons License
Textos do Blog Blogmind sao licenciados sobre a Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.
Parte do Trabalho de
Leandro Godoy - www.opencode.com.br.

Total

5 total Comentarios, deixe seu Comentario ou trackback.
  1. Bom, Muito bom,

    Simples, prárico e didático,

    Tão bom que estou reproduzindo na seção de artigos de meu site…

  2. olá Amigo …

    Seu site tambem é excelente e fique a vontade, pois todo o conteudo do site é licenciado segundo a CC.

    Abraços

  1. Junho 25th 2006
  2. Junho 25th 2006
  3. Junho 25th 2006

Deixe seu Comentario ...


Pesquisa

Tem muita coisa neste Blog (algumas até úteis). Pode pesquisar por palavras chaves aqui: