O local certo para se aprender Linux no Brasil, a sua fonte de artigos, dicas, tutoriais, noticias, howto, reviews e muito mais.

Análise de Performance no Gnu/Linux com ifstat, vmstat

Arquivado em Artigos <> Sistema
Análise de Performance no Gnu/Linux com ifstat, vmstat
A Análise do Desempenho e a Solução de Problemas é um dos maiores desafios dos Administradores de Sistemas ainda mais os que utilizam o linux.

O que fazer e como fazer sempre acarreta 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, 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 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, 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 aproximandamente 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 so não devem ser maiores que 0 (zero) caso contrário sua maquina está fazendo swap, isto é, acabou a memória disponivel 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 depois para verificar como anda a performance do seu sistema.

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 (estatísticas) sobre um processador específico 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 a 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ão 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 diagnósticos muito mais preciso.

7) ifstat –> Fornece estatísticas 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.

Esse Artigo é de autoria de Leandro Godoy

Envie seu comentário
 
 
Copyright © Sputnix.com.br, Seja Livre, Use Linux