detener - ver procesos en ejecucion linux
¿Cómo puedo controlar el conteo de subprocesos de un proceso en Linux? (15)
Aquí hay un comando que muestra el número de subprocesos de un proceso determinado:
ps -L -o pid= -p <pid> | wc -l
A diferencia de las otras respuestas basadas en ps
, aquí no hay necesidad de restar 1
de su salida ya que no hay línea de encabezado ps
gracias a la opción -o pid=
.
Me gustaría monitorear la cantidad de subprocesos usados por un proceso específico en Linux. ¿Hay una manera fácil de obtener esta información sin afectar el rendimiento del proceso?
Cada subproceso en un proceso crea un directorio en /proc/<pid>/task
. Cuente la cantidad de directorios y tenga la cantidad 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 pasar por wc -l.
Más gráficamente es JConsole, que muestra el conteo de hilos para un proceso dado.
La forma más fácil es usar "htop". Puede instalar "htop" (una versión más elegante de la parte superior) que le mostrará todos sus núcleos, procesos y uso de la memoria.
Presione "Shift + H" para mostrar todo el proceso o presione de nuevo para ocultarlo. Presione la tecla "F4" para buscar el nombre de su proceso.
Instalando 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" desde el código fuente, lo encontrará here .
Las distribuciones más nuevas de JDK se envían con JConsole y VisualVM. Ambas son herramientas fantásticas para obtener los detalles sucios de un proceso en ejecución de Java. Si tiene que hacer esto programáticamente, investigue JMX.
Para obtener el número de subprocesos para un pid dado:
$ ps -o nlwp <pid>
Donde nlwp
significa Número de procesos de peso ligero (hilos) . Así, ps
alias nlwp
a thcount
, lo que significa que
$ ps -o thcount <pid>
también funciona
Si quieres monitorear el conteo de hilos, simplemente usa watch
:
$ reloj ps -o thcount
Para obtener la suma de todos los subprocesos que se ejecutan en el sistema:
$ ps -eo nlwp | tail -n +2 | awk ''{ num_threads += $1 } END { print num_threads }''
Si está tratando de averiguar el número de subprocesos usando cpu para un pid dado, yo usaría:
top -bc -H -n2 -p <pid> | awk ''{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }'' | sort -u | wc -l
Si le interesan los hilos que están realmente activos , como hacer algo (no bloqueado, no temporizado), no informando "ejecución de subprocesos" pero realmente esperando que una transmisión brinde datos) en lugar de quedarse sentado ocioso pero en vivo - - entonces podría estar interesado en jstack-active .
Este sencillo script bash ejecuta jstack
luego filtra todos los subprocesos que por heurística parecen estar inactivos, mostrándole rastros de pila para aquellos subprocesos que en realidad consumen ciclos de CPU.
Si utiliza:
ps uH p <PID_OF_U_PROCESS> | wc -l
Tienes que restar 1 al resultado, ya que una de las líneas "wc" está contando son los encabezados del comando "ps".
jvmtop puede mostrar el recuento actual de hilos jvm junto a otras métricas.
$ ps H p pid-id
H - Enumera todos los hilos individuales en un proceso
o
$cat /proc/pid-id/status
pid-id es la identificación del proceso
por ejemplo .. (Truncado el resultado a continuación)
root@abc:~# cat /proc/8443/status
Name: abcdd
State: S (sleeping)
Tgid: 8443
VmSwap: 0 kB
Threads: 4
SigQ: 0/256556
SigPnd: 0000000000000000
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 comando top
luego presionar ''H'' para alternar las listas de hilos.
cat /proc/<PROCESS_PID>/status | grep Threads