Muestra los cinco principales procesos consumidores de CPU con `ps`

101

¿Cómo mostrar los cinco principales procesos consumidores de CPU con ps?

PlanasB
fuente

Respuestas:

95

¿Por qué usarlo pscuando puedes hacerlo fácilmente con el topcomando?

Si debe usar ps, intente esto:

ps aux | sort -nrk 3,3 | head -n 5

Si quieres algo que sea realmente 'top'esq con actualizaciones constantes, usa watch

watch "ps aux | sort -nrk 3,3 | head -n 5"
Boban P.
fuente
3
ps aux | sort -k 3,3 | tail -n 5 ;-)
PlanasB
1
será bueno incluir la ordenación numérica, para omitir el encabezado de ps aux. ps aux | sort -nrk 3,3 | head -n 5
syss
1
esto genera muchos procesos que consumen más recursos y también son más propensos a la condición de carrera, porque cuando los datos canalizados llegan a la cabeza, la lista de procesos ya puede haber cambiado
phuclv
Esto es cierto @ LưuVĩnhPhúc, pero me pregunto cómo difiere de cómo topfunciona realmente.
agua helada
1
@icedwater toplee la lista de procesos y mostrar el resultado por sí solo sin la tubería a cualquier otro proceso
phuclv
87

La respuesta correcta es :

ps --sort=-pcpu | head -n 6

Por lo tanto, puede especificar columnas sin interferir con la ordenación.

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

Nota para MAC OS X : en Mac OS X, psno reconoce --sort, pero ofrece -rordenar por el uso actual de la CPU. Por lo tanto, para Mac OS X puede usar:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6
Facundo Victor
fuente
3
Esta es la respuesta correcta. Gracias facundo. Estaba tratando de explicar a los demás que puedes usar sort y pipe, pero ps también viene incorporado con una opción para ordenar y ahora veo que también lo usas, lo cual es genial.
Luis Alvarado
El segundo comando parece más útil ... pero el primero parece mostrar bash(x2, o headtambién) ps...
Wilf
3
@Wilf El primero es para resaltar cómo ordenar por consumo de CPU sin usar el comando sort, el segundo muestra cómo especificar columnas sin interferir con la ordenación. Al explicar algo ... siempre es mejor ser conciso y explicar una cosa a la vez.
Facundo Victor
27

Dependiendo de sus necesidades, puede encontrar esto un poco más legible:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

salida de muestra:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(los campos son% CPU, PID, USUARIO, COMANDO)

Ryan Horrisberger
fuente
22

No creo que pssea ​​lo que estás buscando. ¿Has mirado la salida de top?

Si tiene GNU-Top, intente usar su modo por lotes para escupir una lista de procesos ordenada por uso de CPU y usar head / tail para obtener las 5 primeras líneas (los primeros 8 son encabezados):

top -b -n 1 | head -n 12  | tail -n 5

La parte superior de BSD parece comportarse de manera diferente y no tiene un modo no interactivo, así que use una de las otras pssoluciones basadas.

Caleb
fuente
1
En OS X, es top -o cpu -n 5una forma de lograr lo mismo. ¿Alguien sabe? Mi topes diferente a tu top.
boehj
Eres el que tiene la parte superior diferente, por lo que estarías en condiciones de decirlo. Mi parte superior no tiene -oy -nestablece la cantidad de veces que actualiza la pantalla antes de salir.
Caleb
Lo suficientemente justo. Me subiré a una caja de Linux esta tarde y echaré un vistazo. Mi topno parece tener un modo por lotes, lo cual es bastante limitante. Debe haber alguna forma de canalizar topotros comandos. Investigaré un poco.
boehj
Mencioné el cambio de modo por lotes en mi respuesta, pero en realidad no es necesario para mi parte superior porque detecta automáticamente que es parte de una tubería en lugar de una sesión interactiva. ¿Intentaste simplemente conectarlo sin eso?
Caleb
1
Lo haré GNU topfuncionó como se describe esta tarde. Salud.
boehj
6

El revestimiento más rápido que he encontrado para esto (nota 6 porque el encabezado se suma):

ps aux k-pcpu | head -6
Néstor Urquiza
fuente
5

Tenga en cuenta que las versiones actuales de ps tienen la capacidad de clasificación dentro de ellos, en función de los códigos de campo (que figuran en la página de manual de ps). El código de campo para el uso del procesador es "c". Puede usar --sort cal final de un comando ps, por ejemplops aux --sort c

Esto colocará el proceso usando la mayor cantidad de CPU al final de la lista. Invierta el orden de la lista agregando un signo menos al código de campo utilizado para ordenar, por ejemplops aux --sort -c

Cian D
fuente
4

Para agregar un punto a otras respuestas valiosas, prefiero:

ps auxk-c | head -6

También imprime el encabezado, lo cual es bueno.

Aquí kes idéntico --sorty cespecifica el campo de uso de la CPU (alias %cpu) para la ordenación, mientras que -es para la ordenación inversa.

Es posible añadir más especificadores separadas por ,, otros especificadores posibles son: %mem, args, bsdstart, pid, gid, uid... donde puede encontrar una lista completa de los especificadores de formato ESTÁNDAR sección de la página hombre. Por ejemplo:

 ps auxk -gid,-%mem | head -11

imprimiría 10 procesos con el ID de grupo más alto, ordenados internamente por uso de memoria.

2i3r
fuente
3

La herramienta de línea de comandos pstiene su propia opción de clasificación, por lo que prefiero:

$ ps -eo pcpu,args --sort=-%cpu | head

Puede agregar las columnas que desee. Vea qué otras opciones están disponibles en la pspágina del manual.

$ man ps
Christopher James Morton
fuente
0

topen Mac OS X tiene una opción de modo de registro en forma de top -l numberOfSamples(que parece ser el equivalente al modo por lotes de GNU top). Sin embargo, es necesario tener al menos dos muestras porque "la primera muestra mostrada tendrá un% de CPU no válido para cada proceso, ya que se calcula utilizando el delta entre muestras" ( man 1 top).

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6
ulf
fuente
0

topmostrará lo que está usando tu CPU. Si lo tiene instalado, le htoppermite un control más detallado, incluido el filtrado por, en su caso, CPU.

PSN
fuente
0

Creo que la forma más sencilla de ver los 5 principales procesos que consumen CPU es,

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

Para ver los 5 principales procesos que consumen memoria es,

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

Dónde,

-e : Esta bandera se usa para seleccionar todo el proceso

-o : Este indicador se usa para formatear como definido por el usuario.

pid : Este argumento se usa para mostrar pid

comm: Este argumento se usa para mostrar solo el nombre del comando. Para obtener el uso completo del comando args, cmdocommand

%cpu: Este argumento muestra el porcentaje de utilización de la CPU del proceso en formato "##. #". Aquí pcputambién se puede utilizar.

%mem: Este argumento muestra la proporción del tamaño del conjunto residente del proceso con respecto a la memoria física en la máquina, expresada como un porcentaje. Aquí pmemtambién se puede utilizar.

--sort: Especifique el orden de clasificación. Después de que =el -signo se utiliza para ordenar el valor más alto en la parte superior, donde la opción predeterminada +es enumerar el orden numérico creciente [es decir, 0 a n].

Mahoma
fuente
-2

top -bn1 |sed -n '7,12'pfunciona como un lindo y pequeño revestimiento también.
Aunque prefiero usar ps con --sort = X -o X, Y, Z

usando ps puede extraer diferentes estadísticas grep para un proceso O usuario y luego total O promediarlas con una tubería para awk.

jshedler
fuente