¿Cómo puedo saber si un proceso es CPU, memoria o enlace de disco?

42

¿Cómo puedo saber si un proceso está vinculado a la CPU, la memoria o el disco?

ssanj
fuente
Si está utilizando una GUI de gnome, puede agregar el subprograma Monitor de sistema a su panel. En la configuración, puede configurar los ciclos perdidos en IO-Wait para que se muestren en blanco, y configurar los gráficos de Memoria, CPU y Lectura / Escritura de disco para mostrar. Por lo general, cambio los colores del gráfico predeterminados para que sea más fácil distinguir la memoria del usuario / SO y la lectura / escritura del disco. No es una solución real, pero es útil tener junto con todas las herramientas mencionadas en las respuestas.
Jeremy
1
@ luis-alvarado No estoy de acuerdo con que esta pregunta no sea útil, aunque diría que esto podría encajar mejor en StackOverflow o similares. Vine aquí buscando una solución.
skeggse
El problema con la pregunta que se hace es que no tiene en cuenta el entorno de ejecución. El método más efectivo para descubrir el cuello de botella del componente host de un trabajo / proceso está íntimamente relacionado con el tiempo de ejecución, el entorno de ejecución, el sistema operativo host, el hardware, etc. del trabajo y qué herramientas están disponibles para que cada componente lo inspeccione. Algunos tiempos de ejecución (el tiempo de ejecución de Erlang o JVM de IBM, por ejemplo) tienen herramientas en profundidad para esto que abarcan todo el entorno, otros carecen totalmente de herramientas y te dejan haciendo conjeturas educadas basadas en lo que sea htop / iotop / etc. te lo puedo mostrar.
zxq9
Relacionado: stackoverflow.com/questions/3156334/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

19

Eso requiere un poco de vudú. Depende. Ejemplo:

  • Si hay suficiente memoria y los discos no parecen estar demasiado ocupados, puede estar vinculado a la CPU. Mire el uso de la CPU y si está bordeando al 100%, está vinculado a la CPU. Si no es así, hay un cuello de botella artificial en la implementación. Por ejemplo, en una CPU de doble núcleo, un proceso de subproceso único no superará el 50% de uso de la CPU.

  • Si la CPU y la memoria están disponibles, pero los discos están muy ocupados o la latencia de E / S parece alta, es probable que esté vinculada a E / S. Vea si agregar más discos (¿RAID?) Ayuda.

  • ¿Ninguna de las anteriores? Verifique la memoria disponible.

  • Suficiente memoria? Puede haber un cuello de botella artificial en el proceso en sí mismo, es decir, ¿tal vez alguien olvidó eliminar un sueño (1)? Naah no es tan fácil por lo general. ;)

¡Hay una razón por la que tenemos un laboratorio completo para ingenieros de rendimiento en la mayoría de las empresas que se ocupan de productos sensibles al rendimiento!

Use herramientas como sar, vmstat, iostat, oprofile, lockstat, dtrace, herramientas de monitoreo de rendimiento específicas del producto, etc., para depurar problemas de rendimiento.

Sudhanshu
fuente
2
¿Existe alguna herramienta que vincule todo esto?
ssanj
generalmente no, pero si dtrace está disponible en su sistema (Solaris / FreeBSD / Mac OS X?) puede llegar lejos con solo usar eso.
Sudhanshu
Acabo de recordar que hay Systemtap en Linux (similar a dtrace), excepto que no estoy seguro de la madurez de la herramienta.
Sudhanshu
vmstat es útil.
James
12

echa un vistazo iotop, puede ser útil

ithkuil
fuente
iotop no estaba instalado por defecto en redhat
Mona Jalal
9

Una herramienta que puede ser útil para tiempo real verificación de una serie de estadísticas de proceso (memoria, CPU-uso, I / O, etc.) es htop . No reemplaza las herramientas más especializadas nombradas por Sudhanshu, pero podría ser un buen comienzo.

JanC
fuente
4

Además de las otras herramientas mencionadas, ejecute ps l PID, inserte la identificación del proceso relevante o mire las columnas ESTADO y WCHAN en la parte superior o superior.

Si está en estado D (para disco), entonces está haciendo el archivo IO. Esto podría ser porque está leyendo muchos archivos o porque está usando mucha memoria e intercambio. La columna WCHAN le dirá qué función del núcleo está dentro; buscar en Google o preguntar aquí puede darte alguna indicación de lo que significan.

Si está en estado R (ejecución), está utilizando la CPU en el espacio del usuario, en otras palabras, está vinculada a la CPU en ese momento.

Si está en estado S (suspensión), está dentro de una llamada al sistema interrumpible, lo que puede significar que está realmente en suspensión o que está haciendo algo como esperar el tráfico de red o un bloqueo. Nuevamente, mirar el wchan específico le dará más información.

Consulte también ¿Qué es el "Canal de espera" de un proceso?

billar
fuente
2

Ejecute topy mire la línea de uso de la CPU. Un usuario alto% indica que está vinculado a la CPU. Un alto% de espera indica que está vinculado a IO.

psusi
fuente