Linux - Como posso ver o que está esperando pelo disco IO

40

Eu tenho um servidor que tem uma carga muito alta. Nada está saltando em mim em termos de uso da CPU, e não está trocando.

Eu acho que é porque alguns processos estão esperando pelo disco IO, e eu quero ver o que está esperando.

Existe algum programa que me mostre quais processos estão aguardando o IO? Eu sei sobre iotop , mas isso mostra o que está atualmente fazendo IO.

Ou esta é uma pergunta boba? (Se sim, explique como :))

    
por Rory 02.09.2009 / 15:32

4 respostas

45

Você pode usar um monitor de E / S como o iotop, mas ele mostrará apenas processos ou encadeamentos com operações de E / S atuais.

Se você precisar procurar processos que aguardam E / S, use o watch para monitorar processos com o sinalizador STAT 'D', como abaixo:

watch -n 1 "(ps aux | awk '\ ~ /D/  { print \
watch -n 1 "(ps aux | awk '\ ~ /D/  { print \%pre% }')"
}')"
    
por 02.09.2009 / 16:00
18

ps axu e procure por processos que estejam no estado "D". Com base na página do manual do ps (1) , processos que estão no estado D estão em sono ininterrupto, o que quase sempre significa "esperar por IO". Infelizmente, matar esses processos geralmente não é possível.

    
por 02.09.2009 / 15:36
16

A resposta de Zanchey é a melhor que eu sei para descobrir o que está esperando por IO.

Quando você diz que seu servidor está sobrecarregado, o que você quer dizer com isso? Algo em particular demora a responder?

Se você está se perguntando se o seu disco IO é o gargalo, eu usaria o comando iostat (parte do pacote sysstat) para ver se o disco está sob carga pesada.

Exemplo:

[kbrandt@kbrandt-opadmin: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
    
por 02.09.2009 / 15:42
0

Ative o block_dump registro de quais processos estão executando operações de leitura / gravação em bloco:

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

quando terminar, desative o rastreamento para não enviar spam aos seus arquivos de registro:

echo 0 > /proc/sys/vm/block_dump
    
por 29.12.2017 / 22:20

Tags