Como verificar a utilização de E/S do disco por processo?

Como verificar a utilização de E/S do disco por processo?

Estou tendo um problema com um sistema Linux e descobri sysstate sarrelatei enormes picos de E/S de disco, tempo médio de serviço e tempo médio de espera.

Como posso determinar qual processo está causando esses picos na próxima vez que isso acontecer?

É possível fazer com sar? Posso encontrar essas informações nos sararquivos já gravados?

A saída de sar -d, a parada do sistema ocorreu por volta das 12h58 às 13h01.

12:40:01          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:40:01       dev8-0     11.57      0.11    710.08     61.36      0.01      0.97      0.37      0.43
12:45:01       dev8-0     13.36      0.00    972.93     72.82      0.01      1.00      0.32      0.43
12:50:01       dev8-0     13.55      0.03    616.56     45.49      0.01      0.70      0.35      0.47
12:55:01       dev8-0     13.99      0.08    917.00     65.55      0.01      0.86      0.37      0.52
13:01:02       dev8-0      6.28      0.00    400.53     63.81      0.89    141.87    141.12     88.59
13:05:01       dev8-0     22.75      0.03    932.13     40.97      0.01      0.65      0.27      0.62
13:10:01       dev8-0     13.11      0.00    634.55     48.42      0.01      0.71      0.38      0.50

Também tenho esta pergunta complementar a outro tópico que comecei ontem:

Responder1

Se você tiver sorte o suficiente para alcançar o próximo período de pico de utilização, poderá estudar as estatísticas de E/S por processo de forma interativa, usandoiotop.

Responder2

Você pode usarpidstatpara imprimir estatísticas io cumulativas por processo a cada 20 segundos com este comando:

# pidstat -dl 20

Cada linha terá as seguintes colunas:

  • PID - ID do processo
  • kB_rd/s - Número de kilobytes que a tarefa fez com que fossem lidos do disco por segundo.
  • kB_wr/s - Número de kilobytes que a tarefa causou ou fará com que sejam gravados no disco por segundo.
  • kB_ccwr/s - Quantidade de kilobytes cuja gravação em disco foi cancelada pela tarefa. Isso pode ocorrer quando a tarefa trunca algum pagecache sujo. Neste caso, algum IO para o qual outra tarefa foi contabilizada não estará acontecendo.
  • Comando - O nome do comando da tarefa.

A saída é assim:

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]              

Responder3

Nada supera o monitoramento contínuo, você simplesmente não pode recuperar dados urgentes após o evento...

Há algumas coisas que vocêpoderser capaz de verificar para implicar ou eliminar - /procé seu amigo.

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

Os campos 10, 11 são setores escritos acumulados e tempo acumulado (ms) de escrita. Isso mostrará as partições ativas do sistema de arquivos.

cut -d" " -f 1,2,42 /proc/[0-9]*/stat | sort -n -k +3

Esses campos são PID, comando e ticks cumulativos de espera de IO. Isso mostrará seus processos quentes, embora apenasse eles ainda estiverem em execução. (Você provavelmente deseja ignorar os threads de diário do sistema de arquivos.)

A utilidade do item acima depende do tempo de atividade, da natureza dos processos de longa execução e de como os sistemas de arquivos são usados.

Advertências: não se aplica a kernels anteriores a 2.6, verifique sua documentação se não tiver certeza.

(Agora vá e faça um favor ao seu futuro, instale Munin/Nagios/Cacti/qualquer coisa ;-)

Responder4

Usar btrace. É fácil de usar, por exemplo btrace /dev/sda. Se o comando não estiver disponível, provavelmente está disponível no pacotetraço preto.

EDITAR: Como o debugfs não está habilitado no kernel, você pode tentar date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtfou similar. Logar falhas de página não é, obviamente, a mesma coisa que usar btrace, mas se você tiver sorte, PODE lhe dar algumas dicas sobre os processos com maior consumo de disco. Acabei de experimentar um dos meus servidores com maior uso de E/S e a lista incluía os processos que sei que estão consumindo muita E/S.

informação relacionada