Iotop, amigo das horas que o LED do HD não pára de piscar | Fogo na Caixa d'Água
iotop, amigo das horas que o LED do HD não apaga
Daniel K Lima 10/09/2009
Servidor lento, mal acessando remotamente, um simples ls é o suficiente pra levar vários segundos executando… abrir um programa então, nem pensar… vários minutos, o tempo para acender um cigar ou tomar um café.
Você, não entendendo o que se passa, vai dar uma olhada no servidor, as vezes já com a intenção de resetar, e repara que o LED do HD parece com a luz do Power, mas, vermelha…
E pensa: Ops, tem algo errado!
iotop, your best friend when LED of HD stays on
Em situações como essas onde há uma intensa atividade de disco, vêm uma pergunta sórdida "E agora José?", como identificar o que está acessando tanto o disco?
Existem ferramentas próprias para isso, como o iostat e o vmstat colunas bi e bo.
Iostat é uma ferramenta que é uma mão na roda para casos assim mas a interpretação dos valores e forma diposta na tela não é da mais amigável.
Para isso, existe uma ferramenta, o iotop, que faz um interface muito bacana dos dados de I/O. Utiliza os próprios valores que o kernel passa e apresenta de forma bastante elegante.
http://freshmeat.net/projects/iotop
Precisa ter o Python >= 2.5 e o kernel do Linux >= 2.6.20 com as opções habilitadas
CONFIG_TASKSTATS
CONFIG_TASK_DELAY_ACCT
CONFIG_TASK_IO_ACCOUNTING
1 Pré-requisitos
1.1 Instalando o Python 2.5 no Red Hat 5.3 / CentOS 5.3
2 Executando o iotop.py
3 Kernel 2.6.30.5 (rpm) com suporte à estatísticas dos processos e pronto para ser usado com o iotop
4 iotop em funcionamento
5 Instalando o iotop
Instalação mínima do CentOS e RedHat 5.3
Compilando um novo kernel (2.6.30.5) no Linux CentOS 5.3 / Red Hat 5.3
wget http://guichaz.free.fr/iotop/files/iotop-0.3.1.tar.bz2
tar jxvf iotop-0.3.1.tar.bz2 -C /usr/src
cd /usr/src/iotop-0.3.1/
Para executar o programa sem instalar, é só chamar via linha de comando:
./iotop.py
Caso o seguinte erro aconteça:
File "./iotop.py", line 8, in ?
from iotop.ui import main
File "/usr/src/iotop-0.3.1/iotop/ui.py", line 12, in ?
from iotop.data import find_uids, TaskStatsNetlink, ProcessList
File "/usr/src/iotop-0.3.1/iotop/data.py", line 12, in ?
from iotop import ioprio, vmstat
File "/usr/src/iotop-0.3.1/iotop/ioprio.py", line 1, in ?
É por que você não possui o python instalado ou não é a versão 2.5 que é a recomendável, será necessário instalá-lo.
Instalando o Python 2.5 no Red Hat 5.3 / CentOS 5.3
O Red Hat 5 / CentOS 5 vêm com o python 2.4 por padrão. Não é legal simplesmente instalar em cima uma nova versão do python, ao invés disso, estou disponibilizando aqui os RPMs do Python 2.5 para o Red Hat 5 / CentOS 5 que será instalado num diretório próprio, em /usr/bin/python25, assim os scripts que o Yum e outros scripts utilizam o python 2.4 não serão prejudicados.
python25-2.5.1-fogonacaixadagua2.i386.rpm
python25-devel-2.5.1-fogonacaixadagua2.i386.rpm
python25-libs-2.5.1-fogonacaixadagua2.i386.rpm
python25-test-2.5.1-fogonacaixadagua2.i386.rpm
A notícia é que sempre que você precisar utilizar a nova versão do python 2.5 terá que alterar o PATH que chama o interpretador. Antes isso, que todo o sistema instável, né?
Se você usa a versão 64bits do Red Hat 5.3 ou CentOS 5.3 (x64), então, você deve baixar o RPM Source do python25 aqui python25-2.5.1-fogonacaixadagua2.src.rpm e compilar para que seja compatível com a versão 64 bits.
Pra fazer é simples. Instale o source e compile com o rpmbuild
rpm -ivh python25-2.5.1-fogonacaixadagua2.src.rpm
rpmbuild -bb /usr/src/redhat/SPECS/python.spec
Os binários serão gerados no diretório /usr/src/redhat/RPMS e proceda com a instalação normal de um rpm, utilizando o comando rpm -ivh ou pelo yum.
Executando o iotop.py
Com o python25 instalado, é hora de modificar o script iotop.py e alterar o caminho do interpretador na primeira linha, que passa de
#!/usr/bin/python25
Ok, hora de executar o script
Se algum dos pré-requisitos não forem satisfeitos, uma mensagem como essa irá pipocar na tela informando o que falta.
- Python >= 2.5 for AF_NETLINK support: Found
- Linux >= 2.6.20 with I/O accounting support (CONFIG_TASKSTATS, CONFIG_TASK_DELAY_ACCT, CONFIG_TASK_IO_ACCOUNTING): Not found
Python 2.5 está OK, mas o kernel não está.
Simples, compilar o kernel com essa opções.
Para compilar um novo kernel, existe um post aqui nesse site que explica isso, aqui só mostrarei onde estão as opções a serem consideradas, compilar e instalar o kernel é com você agora ;)
[*] Export task/process statistics through netlink (EXPERIMENTAL)
[*]   Enable per-task delay accounting (EXPERIMENTAL)
[*]   Enable extended accounting over taskstats (EXPERIMENTAL)
[*]     Enable per-task storage I/O accounting (EXPERIMENTAL)
Kernel 2.6.30.5 (rpm) com suporte à estatísticas dos processos e pronto para ser usado com o iotop
kernel-2.6.30.5fogonacaixadagua-1.i386.rpm
Pra instalar
rpm -ivh kernel-2.6.30.5fogonacaixadagua-1.i386.rpm
e caso você já tenha instalado esse kernel, deverá gerar a imagem initrd novamente e utilizar a flag --force no comando rpm -ivh --force.
iotop em funcionamento
Instalando o iotop
Entre no diretório onde descompactou o iotop-0.3.1 e execute o comando ./setup.py install
cd /usr/src/iotop-0.3.1
Como foi instalada a versão 2.5 do Python, se você tentar executar o comando /usr/bin/iotop será agraciado com o seguinte erro
File "/usr/bin/iotop", line 4, in <module>
Pra resolver esse impasse, é bem simples, no diretório onde foi descompactado o iotop, no caso /usr/src/iotop-0.3.1 copie o diretório iotop para /usr/lib/python-2.5