¿Cómo puedo saber qué procesos están causando altas cargas si no son de alto uso de CPU?

12

Algunas veces mis servidores mostrarán un promedio de carga alto en el programa "superior" (por ejemplo, la carga es de ~ 10 en una máquina de 4 núcleos), pero el uso real de la CPU no es particularmente alto.

Supongo que el problema es que hay muchos trabajos intensivos de E / S en ejecución. ¿Hay alguna manera fácil de identificar estos trabajos que están causando la carga, si sus valores "% CPU" en la parte superior no son tan altos?

Lorin Hochstein
fuente
¿Podría pegar el área de resumen que ve cuando ejecuta el topcomando?
mfriedman

Respuestas:

7

iostatpuede reportar estadísticas como esa. Normalmente se incluye en su distribución en el paquete sysstat.

También vale la pena echar un vistazo a dstat , es un reemplazo moderno.

sleske
fuente
+1 porque iostatiba a ser mi respuesta.
Ernie
4

Si tiene contabilidad IO en su kernel, puede usarla iotoppara dar información como esa. Además, las herramientas de monitoreo como collectd pueden registrar e informar sobre los datos.

David Spillett
fuente
4

Para averiguar qué está causando una carga alta, puede verificar algunas cosas.

  • vmstat -w le mostrará ovierwiem (procesos, intercambio, mem, cpu, io, sistema)
  • pmstat -P ALL le proporcionará estadísticas (con% iowait) por núcleo de CPU
  • iostat -x busque un alto porcentaje de utilidad o espera larga o un gran tamaño de cola promedio
    • cavar más profundo con iotop
  • ps -ax busque el estado D, que es suspensión ininterrumpida (generalmente IO), ejecútelo una vez más y verifique si todavía están en estado D
    • cavar más profundo con strace
    • verificar archivos y conexiones de esos procesos con lsof y netstat
  • sar / sysstat: con esa herramienta puede explorar no solo las estadísticas "ahora", sino también comprobar lo que sucedía ayer a medianoche
    • sar -b - actividades generales de io
    • sar -d - actividades individuales del dispositivo de bloqueo io
3h4x
fuente