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!
The english version is here
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.

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
Pré-requisitos
- 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:
Traceback (most recent call last):
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 ?
import ctypes
É 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/python
para
#!/usr/bin/python25
Ok, hora de executar o script
./iotop.py
Se algum dos pré-requisitos não forem satisfeitos, uma mensagem como essa irá pipocar na tela informando o que falta.
Could not run iotop as some of the requirements are not met: - 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 ;)
General setup ---> ... [*] 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
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 ./setup.py install
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
Traceback (most recent call last): File "/usr/bin/iotop", line 4, in <module> import pkg_resources ImportError: No module named pkg_resources
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
cd /usr/src/iotop-0.3.1 cp -Rp iotop /usr/lib/python2.5/
E por fim, edite o arquivo /usr/bin/iotop e altere a linha do interpretador
de
#!/usr/bin/python
para
#!/usr/bin/python25
Ok, iotop instalado.

Join the conversation