Determinando qual processo está causando E / S de disco pesado?

19

Eu já vi essa pergunta: como identificar a gravação pesada no disco?

E eu usei dstat e no topo antes ... mas eles não parecem identificar qual processo está causando a E / S do disco. Por exemplo, do dstat:

dstat -ta --top-bio
----system---- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- ----most-expensive----
     time     |usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw |  block i/o process
14-12 16:16:25| 22   3  49  26   0   0|2324k    0 |  17k 6144B|   0     0 |1324     0 |
14-12 16:16:26| 24   3  30  43   0   0|4960k 8192B|1498B 4322B|   0     0 |1494     0 |wget          0  4096B
14-12 16:16:27| 25   4  38  33   0   0|4612k  548k|5011B   27k|   0     0 |1582     0 |kjournald     0    24k
14-12 16:16:28| 23   3  42  32   0   0|5072k    0 |  24k 4368B|   0     0 |1495     0 |

Observe como o dsk / total é alto - entre 2 e 5 MB / s. Mas veja a coluna 'mais cara' - são apenas alguns bytes aqui, alguns KB ali e, às vezes, nada. É o mesmo tipo de coisa com 'no topo'. Mostra alto uso geral do disco, mas baixo uso de processos individuais. Estou executando o CentOS 5, kernel 2.6.18-53.

Preciso de uma versão mais recente do kernel? Talvez alguma configuração do sistema esteja em algum lugar? A página inicial 'em cima' recomenda a instalação de alguns patches do kernel, mas eu prefiro não passar pelo trabalho de configurar e compilar meu próprio kernel.

davr
fonte

Respostas:

26

iotop ( link ) para iniciantes;) Eu não vi você postando uma saída dele.

1: Eu experimentei quase a mesma situação com um sistema de arquivos de log e atime - no entanto, com mais gravações.

Tente remontar com noatime e desative o log do sistema de arquivos (posteriormente apenas para teste) para verificar se é baseado no sistema de arquivos e, como dito, muito mais se for baseado no processo.

2: Eu acho que essa partição não faz parte de uma matriz de incursão que acaba de reconstruir, é?

3: Se você está tendo muitos arquivos muito pequenos (muito menores que o tamanho real do dispositivo de bloco e / ou o tamanho do sistema de arquivos) e está lendo esses arquivos pequenos, acaba lendo blocos inteiros do sistema e a maioria desses blocos serão lidos por nada.

4: Se nada ajudar acima, você sempre pode obter a lista de arquivos acessados ​​executando

echo 1 > /proc/sys/vm/block_dump

observe que isso prejudica muito o desempenho do sistema. As instruções estão disponíveis no meu post anterior aqui

asdmin
fonte
1
Bata-me com cerca de 5 segundos;) +1
pehrs 14/12/10
Eu apenas tive sorte, mas quase imediatamente estendi a resposta, pois ela não era exatamente uma resposta para a pergunta;)
asdmin