Me gustaría monitorear la cantidad de hilos utilizados por un proceso específico en Linux. ¿Hay una manera fácil de obtener esta información sin afectar el rendimiento del proceso?
Me gustaría monitorear la cantidad de hilos utilizados por un proceso específico en Linux. ¿Hay una manera fácil de obtener esta información sin afectar el rendimiento del proceso?
Respuestas:
1
porque imprime una línea como USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
para el encabezado de la tabla.
wc
cuando podrías simplemente ps -o thcount <pid>
? Mira esta respuesta .
Para obtener el número de hilos para un pid dado:
$ ps -o nlwp <pid>
Donde nlwp
significa Número de procesos livianos (hilos) . Así ps
alias nlwp
a thcount
, lo que significa que
$ ps -o thcount <pid>
también funciona
Si desea monitorear el conteo de hilos, simplemente use watch
:
$ watch ps -o thcount <pid>
Para obtener la suma de todos los hilos que se ejecutan en el sistema:
$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
watch
comando. Sin embargo, tenga en cuenta que el uso thcount
puede fallar para algunos (Red Hat ...), aunque nlwp
funcionó para mí.
Cada hilo en un proceso crea un directorio debajo /proc/<pid>/task
. Cuente la cantidad de directorios y tendrá la cantidad de hilos.
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
. Simplemente reemplace el <PID> con su ID de proceso que puede obtener top
o usarps
ps -eLf
en el shell le dará una lista de todos los hilos y procesos que se ejecutan actualmente en el sistema. O bien, puede ejecutar el top
comando y luego presionar 'H' para alternar las listas de hilos.
-p
a esto si es necesario, o cualquier otra cosa. Esto es lo mínimo que necesita para ver la lista de hilos.
JStack es bastante económico: una opción sería canalizar la salida a través de grep para encontrar hilos activos y luego canalizar a través de wc -l.
Más gráficamente es JConsole, que muestra el recuento de subprocesos para un proceso determinado.
Si utiliza:
ps uH p <PID_OF_U_PROCESS> | wc -l
Debe restar 1 al resultado, ya que una de las líneas que "wc" cuenta son los encabezados del comando "ps".
ps
como uno de los hilos.
$ ps H p pid-id
H - Lista todos los hilos individuales en un proceso
o
$cat /proc/pid-id/status
pid-id es la ID del proceso
por ejemplo ... (truncado el siguiente resultado)
root@abc:~# cat /proc/8443/status
Name: abcdd
State: S (sleeping)
Tgid: 8443
VmSwap: 0 kB
Threads: 4
SigQ: 0/256556
SigPnd: 0000000000000000
jvmtop puede mostrar el recuento actual de subprocesos jvm junto a otras métricas.
La forma más fácil es usar "htop". Puede instalar "htop" (una versión más elegante de top) que le mostrará todos sus núcleos, procesos y uso de memoria.
Presione "Shift + H" para mostrar todo el proceso o presione nuevamente para ocultarlo. Presione la tecla "F4" para buscar el nombre de su proceso.
Instalación en Ubuntu o Debian:
sudo apt-get install htop
Instalación en Redhat o CentOS:
yum install htop
dnf install htop [On Fedora 22+ releases]
Si desea compilar "htop" a partir del código fuente, lo encontrará aquí .
Si está tratando de averiguar la cantidad de subprocesos que usan CPU para un pid dado, usaría:
top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l
Si está interesado en esos hilos que están realmente activos , como hacer algo (no bloqueado, no timed_waiting, no informar "hilo en ejecución" pero realmente esperando que una transmisión proporcione datos) en lugar de estar inactivo pero en vivo, - entonces te puede interesar jstack-active .
Este script bash simple se ejecuta y jstack
luego filtra todos los subprocesos que, por heurística, parecen estar inactivos, mostrándole rastros de pila para aquellos subprocesos que realmente consumen ciclos de CPU.
Si desea la cantidad de subprocesos por usuario en un sistema Linux, debe usar:
ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'
donde como utilizar el nombre de usuario deseado.