Cómo encontrar los procesos que acaparan la máquina

10

Escenario: De repente, mi computadora se siente lenta. El mouse se mueve pero las ventanas tardan años en abrirse, etc. uptimedice que la carga es de 7.69 y sube.

¿Cuál es la forma más rápida de averiguar qué procesos son la causa de la carga?

Ahora, "top" y herramientas similares no son la respuesta porque muestran el uso de CPU o memoria, pero no ambas al mismo tiempo. Lo que necesito es el comando único que podría escribir mientras sucede, algo que resolverá cualquiera de

El sistema está tratando de intercambiar 8 GB de RAM al disco porque el proceso X ...

o

el proceso X busca por todo el disco

o

el proceso X usa 400% de CPU "

Entonces, lo que estoy buscando es iostat, htop / atop y herramientas similares que se ejecutan en una con una salida como esta:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

No quiero una herramienta que me dé algunos números que pueda analizar, sino una herramienta que me diga exactamente qué proceso causa la carga actual. Suponga que el usuario frente al teclado apenas sabe cómo escribir "proceso", pero el usuario se abruma rápidamente cuando se trata de "tamaño residente", "memoria virtual" o "ciclo de vida del proceso".

Mi argumento es el siguiente: un usuario nota un problema. Puede haber miles de razones ... bueno, casi :-) El usuario quiere saber la fuente del problema.

Las soluciones actuales me dan muchos números, y necesito saber qué significan estos números. Lo que estoy buscando es una meta herramienta. El 99% de los datos es irrelevante para el problema. Entonces, lo que la herramienta debería hacer es buscar procesos que acaparen algunos recursos y enumerar solo aquellos junto con "este proceso necesita mucha CPU, esto produce muchas IRQ, este proceso asigna mucha RAM (y aún está creciendo)".

Esta será una lista relativamente corta. Será mucho más simple para alguien nuevo en esto localizar al culpable de esta lista que de la salida de, digamos, lo htopque me da alrededor de 5000 números pero requiere que yo mismo doble los procesos de subprocesos múltiples (tengo 50 líneas que dicen VIRT 2750Mpero solo 16 GB de RAM: la máquina debería intercambiarse a sí misma pero, por supuesto, esta es una interpretación errónea de los datos que pueden suceder rápidamente).

Aaron Digulla
fuente
No veo porque. Los síntomas que describe no son los de una papelera de disco (no afectaría al mouse). El mouse lento es una CPU clásica a plena capacidad.
soandos
1
Esto es solo un ejemplo. Tómelo con un grano de sal. Imagina que un novato está sentado frente a la computadora y no sabe nada. ¿Cómo puede descubrir más fácilmente lo que está sucediendo (es decir, sin pasar media hora buscando en Google lo que topsignifica la producción )
Aaron Digulla
¿Está buscando un equivalente de Linux del administrador de tareas con una interfaz gráfica de usuario y todo, o algo más?
soandos
Busco algo que ejecuto y que dice "El proceso X está acaparando la máquina".
Aaron Digulla

Respuestas:

3

Tengo que sonreír ante las respuestas porque cada una te dijo que ejecutaras la herramienta X. El único problema es que si lo que estás viendo es intermitente, no habrá forma de correlacionar nada. Una herramienta como sar puede ayudar si la ejecuta a una frecuencia suficientemente alta, pero afirmaría que collectl es aún mejor.

Al igual que sar , lo ejecutas como un demonio instalando el RPM y haciendo /etc/init.d/collectl start.

Ahora, cuando vea algo lento, collectl -p /var/log/collectl/filename --topreproducirá los datos y le mostrará los principales procesos. También podrías haber corrido collectl --topy verlos en tiempo real. Por cierto, cualquier cosa que puedas hacer en tiempo real también puedes reproducirla.

En cuanto a la carga de la CPU, ¿qué pasa si se sobrecarga con interrupciones? collectl -sCno solo mostrará las cargas en CPU individuales (o se usará -scpara una carga promedio), sino que mostrará cómo están gastando su tiempo. Incluya -j( -scj) y verá el número de interrupciones / CPU. Use mayúsculas -Jy verá los TIPOS de cada interrupción / CPU.

Por supuesto, si realmente le gusta vmstat, siempre puede reproducir datos de colección --vmstaty mostrará datos históricos en formato vmstat.

Hay muchos más conmutadores de los que tengo tiempo para enumerar, pero puede consultarlos en SourceForge o simplemente buscarlos en Google.

Mark Seger
fuente
Gracias; Esto no es exactamente lo que estaba buscando, pero al menos es un buen punto de partida.
Aaron Digulla
Herramienta fantástica! Y en Ubuntu (al menos desde 12.04) solo tiene que instalar el paquete: inicia el demonio automáticamente en la instalación y se reinicia a partir de entonces :)
nealmcb
6

"top" funciona razonablemente bien, siempre que observe los números correctos. Veamos:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Ahora, si el sistema es lento porque la CPU está ocupada, se muestra como columnas "us" y "sy" en "Cpu (s):" fila que está cerca del 100% juntas.

Si es lento debido al intercambio, "Mem:" "free" muestra valores muy bajos y "Swap:" "usa" valores altos.

Si es lento debido a E / S en general, entonces "CPU (s):" "wa" indica que el tiempo se gasta en E / S de espera.

Ahora, si sabe que las esperas de E / S son el problema, puede usar los programas "iotop" para saber qué procesos crean la mayoría de las E / S.

Zds
fuente
+1 Pero estoy buscando una herramienta que haga este análisis por mí e imprima el proceso junto con información que está mal. No quiero deducir eso de las cifras "crudas". ¿Cualquier cosa?
Aaron Digulla
1
Lo siento, pero no puede resolver problemas como la lentitud de la máquina sin comprender en el nivel básico la diferencia entre los diferentes tipos de lentitud. Si existen tales herramientas, no las conozco; lo más probable es que necesite un administrador de computadoras / técnico de servicio capaz.
Zds
Sería bueno que exista una herramienta de este tipo porque ciertamente es posible determinar esto automáticamente: si puedo deducirlo de la salida de top, también puede hacerlo una computadora. Esta no es la sonrisa de Mona Lisa, es solo hacer algunos números para encontrar los "malos".
Aaron Digulla
2

Según el uso del 400%, supondré que tiene un procesador de cuatro núcleos. Su promedio de carga es casi el doble de la capacidad y la mitad de los procesos están esperando la CPU.

Primero, renicesu shell a 0 o -10 para obtener un sistema más receptivo, y luego use htoppara encontrar los procesos ofensivos y siga con eso straceen un proceso dado. Otras herramientas que podrían ser útiles son:

  • vmsat
  • sar
  • iostat
  • pmap
Terpion
fuente
1

Un mouse lento también podría deberse a una carga de interrupción demasiado alta o a que los controladores USB están muy ocupados (supongo que es un mouse USB).

Bruce ONeel
fuente
¿Alguna herramienta que me diga qué controlador / componente causa la alta carga de IRQ?
Aaron Digulla
1

vmstat podría ayudarlo en términos generales. Un ejemplo de uso es:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

También puede ejecutarlo cada X segundos, solo agregue el número X después del comando.

Editar: En vista del comentario ... Escriba lo siguiente en un archivo y haga que ese archivo sea ejecutable. Le indicará los 3 principales procesos en la máquina.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Si desea saber qué memoria acaparada en lugar de CPU, entonces lea la página de manual superior y cambie el orden de visualización.

Sardathrion - contra el abuso SE
fuente
Estoy buscando algo más de alto nivel. Debería ejecutar vmstat y analizar los números por mí, así que no tengo que saber qué significa "cs" y si una "cs" grande es "buena" o "mala".
Aaron Digulla