ver uso temperatura sistema porcentaje para monitorear informacion consumo comandos comando caracteristicas linux multicore measurement performance

linux - temperatura - ¿Cómo mido el uso del núcleo de CPU por separado para un proceso?



ver caracteristicas cpu linux (8)

¿Hay alguna manera de medir el uso de CPU de un proceso específico por núcleos?

Sé que la top es buena para medir el uso total de la CPU del sistema por núcleos y el conjunto de taskset puede proporcionar información sobre qué núcleo de la CPU está permitido para que el proceso se ejecute.

¿Pero cómo mido el uso de CPU de un proceso específico por núcleos de CPU?


La solución ps era casi lo que necesitaba y con algo de bash arrojado hace exactamente lo que la pregunta original pedía: ver el uso por núcleo de procesos específicos

Esto muestra el uso por núcleo de los procesos de subprocesos múltiples también.

Use como: cpustat `pgrep processname`` pgrep otherprocessname` ...

#!/bin/bash pids=() while [ $# != 0 ]; do pids=("${pids[@]}" "$1") shift done if [ -z "${pids[0]}" ]; then echo "Usage: $0 <pid1> [pid2] ..." exit 1 fi for pid in "${pids[@]}"; do if [ ! -e /proc/$pid ]; then echo "Error: pid $pid doesn''t exist" exit 1 fi done while [ true ]; do echo -e "/033[H/033[J" for pid in "${pids[@]}"; do ps -p $pid -L -o pid,tid,psr,pcpu,comm= done sleep 1 done

Nota: Estas estadísticas se basan en la duración del proceso, no en los últimos X segundos, por lo que deberá reiniciar el proceso para reiniciar el contador.


Pensé que la perf stat es lo que necesitas.

Muestra un uso específico de un proceso cuando especifica una opción --cpu=list . Aquí hay un ejemplo de cómo monitorear el uso de la CPU para construir un proyecto usando la perf stat --cpu=0-7 --no-aggr -- make all -j comando perf stat --cpu=0-7 --no-aggr -- make all -j . El resultado es:

CPU0 119254.719293 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU1 119254.724776 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU2 119254.724179 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU3 119254.720833 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU4 119254.714109 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU5 119254.727721 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU6 119254.723447 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU7 119254.722418 task-clock (msec) # 1.000 CPUs utilized (100.00%) CPU0 8,108 context-switches # 0.068 K/sec (100.00%) CPU1 26,494 context-switches (100.00%) CPU2 10,193 context-switches (100.00%) CPU3 12,298 context-switches (100.00%) CPU4 16,179 context-switches (100.00%) CPU5 57,389 context-switches (100.00%) CPU6 8,485 context-switches (100.00%) CPU7 10,845 context-switches (100.00%) CPU0 167 cpu-migrations # 0.001 K/sec (100.00%) CPU1 80 cpu-migrations (100.00%) CPU2 165 cpu-migrations (100.00%) CPU3 139 cpu-migrations (100.00%) CPU4 136 cpu-migrations (100.00%) CPU5 175 cpu-migrations (100.00%) CPU6 256 cpu-migrations (100.00%) CPU7 195 cpu-migrations (100.00%)

La columna de la izquierda es el índice de CPU específico y la columna de la derecha es el uso de la CPU. Si no especifica la --no-aggr , el resultado se agregará. La opción --pid=pid te ayudará si quieres monitorear un proceso en ejecución.

Pruebe -a --per-core o -a perf-socket también, que presentará más información clasificada.

Se puede ver más sobre el uso de la perf stat de perf stat en este tutorial: estadística de perfcpu , también la perf help stat ayudará en el significado de las opciones.


Puedes usar:

mpstat -P ALL 1

Muestra cuánto ocupa cada núcleo y se actualiza automáticamente cada segundo. La salida sería algo como esto (en un procesador de cuatro núcleos):

10:54:41 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 10:54:42 PM all 8.20 0.12 0.75 0.00 0.00 0.00 0.00 0.00 90.93 10:54:42 PM 0 24.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 74.00 10:54:42 PM 1 22.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 76.00 10:54:42 PM 2 2.02 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97 10:54:42 PM 3 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00 10:54:42 PM 4 14.15 0.00 1.89 0.00 0.00 0.00 0.00 0.00 83.96 10:54:42 PM 5 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00 10:54:42 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 10:54:42 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

Este comando no responde la pregunta original, es decir, no muestra el uso del núcleo de la CPU para un proceso específico.


Solo tuve este problema y encontré una respuesta similar here .

El método es establecer la top la manera que lo desee y luego presione W (mayúscula W). Esto guarda el diseño actual de top en un archivo de configuración en $ HOME / .toprc

Aunque esto puede no funcionar si desea ejecutar múltiples top con diferentes configuraciones.

Entonces, a través de lo que considero una solución alternativa, puede escribir en diferentes archivos de configuración / usar diferentes archivos de configuración haciendo uno de los siguientes ...

1) Cambiar el nombre del binario

ln -s /usr/bin/top top2 ./top2

Ahora .top2rc se va a escribir en su $ HOME

2) Establezca $ HOME en alguna ruta alternativa, ya que escribirá su archivo de configuración en el archivo $ HOME / .binary-name.rc

HOME=./ top

Ahora .toprc se va a escribir en la carpeta actual.

A través del uso de los comentarios de otras personas para agregar las diversas cuentas de uso en la parte superior, puede crear un resultado por lotes para esa información y, a continuación, unir la información a través de un script. Tal vez no sea tan simple como tu script pero encontré top para proporcionarme TODOS los procesos para que luego pueda recapitular y capturar un estado a largo plazo que de otro modo podría haber pasado por alto (uso de CPU repentino e inexplicado debido a procesos extraviados)


Todavía puedes hacer esto en la parte superior

Tipo 1: muestra cada CPU

Limite los procesos que se muestran haciendo que ese proceso específico se ejecute en una cuenta de usuario específica y use el tipo ''u'' para limitar a ese usuario


puedes usar ps .
por ejemplo, tener un proceso de python con dos hilos ocupados en la CPU de doble núcleo:

$ ps -p 29492 -L -o pid,tid,psr,pcpu PID TID PSR %CPU 29492 29492 1 0.0 29492 29493 1 48.7 29492 29494 1 51.9

(PSR es la id. De la CPU a la que el subproceso está asignado actualmente)

ves que los hilos se ejecutan en el mismo núcleo de CPU (debido a GIL)

ejecutando la misma secuencia de comandos python en jython, vemos que la secuencia de comandos está utilizando ambos núcleos (y hay muchos otros hilos de servicio o cualquier cosa, que están casi inactivos):

$ ps -p 28671 -L -o pid,tid,psr,pcpu PID TID PSR %CPU 28671 28671 1 0.0 28671 28672 0 4.4 28671 28673 0 0.6 28671 28674 0 0.5 28671 28675 0 2.3 28671 28676 0 0.0 28671 28677 1 0.0 28671 28678 1 0.0 28671 28679 0 4.6 28671 28680 0 4.4 28671 28681 1 0.0 28671 28682 1 0.0 28671 28721 1 0.0 28671 28729 0 88.6 28671 28730 1 88.5

puede procesar la salida y calcular la CPU total para cada núcleo de CPU.

Desafortunadamente, este enfoque no parece ser 100% confiable, a veces veo que en el primer caso, los dos hilos de trabajo se separan para cada núcleo de CPU, o en el último caso, se informa que los dos hilos están en el mismo núcleo ...


htop ofrece una buena visión general del uso del núcleo individual


dstat -C 0,1,2,3

También le dará el uso de CPU de los primeros 4 núcleos. Por supuesto, si tienes 32 núcleos, entonces este comando se hace un poco más largo pero útil si solo te interesan algunos núcleos.

Por ejemplo, si solo te interesan los núcleos 3 y 7, entonces podrías hacer

dstat -C 3,7