¿Recuperar el uso de la CPU y la memoria de un solo proceso en Linux?

Quiero obtener el uso de la CPU y la memoria de un único proceso en Linux: conozco el PID. Con suerte, puedo obtenerlo cada segundo y escribirlo en un archivo CSV usando el comando ‘mirar’. ¿Qué comando puedo usar para obtener esta información de la línea de comandos de Linux?

ps -p  -o %cpu,%mem,cmd 

(Puede dejar “cmd” pero eso puede ser útil para la depuración).

Tenga en cuenta que esto da un uso promedio de la CPU del proceso durante el tiempo que se ha estado ejecutando.

Una variante de la respuesta de caf : top -p

Esto actualiza automáticamente el uso de la CPU por lo que es bueno para la supervisión.

Puede obtener los resultados por el nombre del proceso utilizando

 ps -C chrome -o %cpu,%mem,cmd 

la opción -C permite usar el nombre del proceso sin saber que es pid.

Utilice pidstat (desde sysstat – Refer Link ).

por ejemplo, para controlar estos dos ID de proceso (12345 y 11223) cada 5 segundos de uso

 $ pidstat -h -r -u -v -p 12345,11223 5 

Lanzar un progtwig y monitorearlo

Este formulario es útil si desea comparar un ejecutable fácilmente:

 topp() ( $* &>/dev/null & pid="$!" trap ':' INT echo 'CPU MEM' while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done kill "$pid" ) topp ./myprog arg1 arg2 

Ahora cuando presiona Ctrl + C, sale del progtwig y deja de monitorear. Muestra de salida:

 CPU MEM 20.0 1.3 35.0 1.3 40.0 1.3 

Probado en Ubuntu 16.04.

Puede usar top -b y grep el pid que desea (con la bandera -b ejecuta en modo batch), o también use el indicador -p y especifique el pid sin usar grep.

 ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr 

o por proceso

 ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql 

Como se comentó en la respuesta de caf anterior, ps y en algunos casos, pidstat le proporcionará el promedio de por vida del pCPU. Para obtener resultados más precisos, use la parte superior. Si necesita ejecutar top una vez que puede ejecutar:

 top -b -n 1 -p  

o para datos solo de proceso y encabezado:

 top -b -n 1 -p  | tail -3 | head -2 

sin encabezados:

 top -b -n 1 -p  | tail -2 | head -1 
 ps aux|awk '{print $2,$3,$4}'|grep PID 

donde la primera columna es el PID, uso de la CPU de la segunda columna, uso de la memoria de la tercera columna.

Para obtener el uso de la memoria de solo su aplicación (a diferencia de las bibliotecas compartidas que utiliza, debe usar la interfaz smaps de Linux). Esta respuesta lo explica bien .

 ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep 

PID – ID del proceso

etime – Proceso en ejecución / Duración en vivo

% cpu – uso de la CPU

% mem – Uso de la memoria

cmd – Comando

Reemplace el nombre de proceso con el proceso que desee rastrear, mysql nginx php-fpm, etc.

Todas las respuestas aquí muestran solo el porcentaje de memoria para el PID.

Aquí hay un ejemplo de cómo obtener el uso de la memoria rss en KB para todos los procesos de Apache, reemplace “grep apache” con “grep PID” si solo quiere ver un PID específico:

 watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$6}'" 

Esto imprime:

 Every 5.0s: ps aux -y | grep apache | awk '{print $2,$6}' Thu Jan 25 15:44:13 2018 12588 9328 12589 8700 12590 9392 12591 9340 12592 8700 12811 15200 15453 9340 15693 3800 15694 2352 15695 1352 15697 948 22896 9360 

Con CPU%:

 watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$3,\$6}'" 

Salida:

 Every 5.0s: ps aux -y | grep apache | awk '{print $2,$3,$6}' Thu Jan 25 15:46:00 2018 12588 0.0 9328 12589 0.0 8700 12590 0.0 9392 12591 0.0 9340 12592 0.0 8700 12811 0.0 15200 15453 0.0 9340 15778 0.0 3800 15779 0.0 2352 15780 0.0 1348 15782 0.0 948 22896 0.0 9360 

(Si está en MacOS 10.10, pruebe la opción -c acumulativa de la parte superior:

 top -ca -pid PID 

(Esta opción no está disponible en otros linux, se intentó con Scientific Linux el6 y RHEL6)

Arriba enumera la CPU superior y el proceso de consumo de memoria

  ps axo %cpu,%mem,command | sort -nr | head 

Uso de la CPU y la memoria de un único proceso en Linux o puede obtener los 10 procesos más utilizados por la CPU utilizando el siguiente comando

ps -aux –sort -pcpu | cabeza -n 11