Como posso saber quais processos estão causando altas cargas se eles não são de alto uso da CPU?

12

Às vezes, meus servidores mostram uma alta média de carga no programa "top" (por exemplo, a carga é ~ 10 em uma máquina de 4 núcleos), mas o uso real da CPU não é particularmente alto.

Suponho que o problema é que existem muitos trabalhos intensivos de E / S em execução. Existe alguma maneira fácil de identificar esses trabalhos que estão causando a carga, se os valores de "% CPU" no topo não forem tão altos?

Lorin Hochstein
fonte
Você pode colar a área de resumo que vê quando executa o topcomando?
Mfriedman 19/08/09

Respostas:

7

iostatpode relatar estatísticas como essa. Geralmente incluído na sua distribuição no pacote sysstat.

O dstat também pode valer uma olhada, é um substituto moderno.

sleske
fonte
+1 porque iostatseria a minha resposta.
21415 Ernie
4

Se você possui contabilidade de E / S no seu kernel, pode usar iotoppara fornecer informações assim. Além disso, ferramentas de monitoramento como o collectd podem registrar e relatar os dados.

David Spillett
fonte
4

Para descobrir o que está causando alta carga, você pode verificar algumas coisas.

  • vmstat -w mostrará ovierwiem (processos, swap, mem, cpu, io, sistema)
  • pmstat -P ALL fornecerá estatísticas (com% iowait) por núcleo da CPU
  • iostat -x procure alto% de utilidade ou longa espera ou grande tamanho médio da fila
    • cavar mais fundo com iotop
  • ps -ax procure o estado D, que é sono ininterrupto (geralmente IO), execute-o mais uma vez, verifique se eles ainda estão no estado D
    • cavar mais fundo com strace
    • verifique arquivos e conexões desses processos com lsof e netstat
  • sar / sysstat - com essa ferramenta você pode explorar não apenas as estatísticas do "agora", mas também verificar o que estava acontecendo ontem à meia-noite
    • sar -b - atividades gerais io
    • sar -d - atividades individuais de dispositivos de bloco io
3h4x
fonte