2008-11-06 9 views

Respuesta

6

JStack es bastante económico: una opción sería canalizar la salida a través de grep para buscar hilos activos y luego pasar por wc -l.

Más gráficamente es JConsole, que muestra el número de subprocesos para un proceso determinado.

4

Las distribuciones JDK más nuevas 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.

114

tratar

ps huH p <PID_OF_U_PROCESS> | wc -l 

o htop

+2

Creo que debe restar '1' de él porque imprime una línea como' PID USUARIO% CPU% MEM VSZ RSS TTY STAT START TIME COMMAND' para el encabezado de la tabla. –

+1

La 'h' oculta el encabezado. – thinkmassive

+1

-1 ¿Por qué conectar la salida a 'wc' cuando podría simplemente' ps -o thcount '? Ver [esta respuesta] (https://stackoverflow.com/a/37713259/194894). – Flow

6

Si utiliza:

ps uH p <PID_OF_U_PROCESS> | wc -l 

Hay que restar 1 al resultado, como una de las líneas de "WC" está contando es la encabezados del comando "ps".

+0

Bienvenido a StackOverflow. Podría decirse que esto debería ser un comentario a la respuesta de slav0nic.Sin embargo, tal como lo entiendo, cuando te unes a SO por primera vez, (todavía) no puedes comentar las respuestas hasta que hayas ganado reputación, por lo que agregar una respuesta es todo lo que puedes hacer. Estás en lo correcto; no debe contar la línea de encabezado de 'ps' como uno de los hilos. –

38

Cada subproceso en un proceso crea un directorio en /proc/<pid>/task. Cuente la cantidad de directorios y tenga la cantidad de hilos.

+0

Para agregar al comentario anterior. Puede usar este comando para buscar la cantidad de hilos: 'find/proc//task -maxdepth 1 -type d -print | wc -l'. Simplemente reemplace el _ _ con su ID de proceso que puede obtener de 'arriba' o usando 'ps' – Navigatron

3

jvmtop puede mostrar el recuento actual de hilos jvm junto a otras métricas.

5

Aquí es un comando que muestra el número de hilos de un proceso dado:

ps -L -o pid= -p <pid> | wc -l 

A diferencia de las otras respuestas basadas ps, aquí no hay necesidad de restar 1 de su salida ya que no hay ps cabecera línea gracias a la opción -o pid=.

16

ps -eLf en el armazón le dará una lista de todos los hilos y procesos que se ejecutan actualmente en el sistema. O bien, puede ejecutar el comando top y luego presionar 'H' para alternar las listas de subprocesos.

+0

Esta es la salsa para mí. No quiero limitarlo solo a un proceso. Es fácil agregar un '-p' a esto si es necesario, o cualquier otra cosa. Este es el mínimo que necesita para ver la lista de hilos. –

+0

ps -eLf funcionó para mí junto con grep -c CashCow

17
cat /proc/<PROCESS_PID>/status | grep Threads 
+1

o 'grep Threads/proc//status' –

0

Si usted está interesado en los temas que son realmente activa - como en hacer algo (no bloqueado, no timed_waiting, no informar "hilo conductor", pero en realidad la espera de una corriente para dar datos) en lugar de quedarse sentado ocioso pero en vivo, entonces podría estar interesado en jstack-active.

Este script bash simple 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.

0

VisualVM puede mostrar estados claros de hilos de un proceso JVM dado

enter image description here

+0

self induced thrashing? ¡dang! –

2

$ ps H p pid-id

H - Listas de todos los hilos individuales en un proceso

o

$cat /proc/pid-id/status

pid-id es el ID de proceso

por ejemplo .. (truncado el resultado a continuación)

[email protected]:~# cat /proc/8443/status 
Name: abcdd 
State: S (sleeping) 
Tgid: 8443 
VmSwap:  0 kB 
Threads: 4 
SigQ: 0/256556 
SigPnd: 0000000000000000 
9

Para obtener el número de hilos para un pid dado:

$ ps -o nlwp <pid> 

Dónde nlwp gradas para Número de procesos ligeros (hilos). De este modo ps alias nlwp a thcount, lo que significa que

$ ps -o thcount <pid> 

también funciona.

Si desea controlar el número de hilos, basta con utilizar watch:

$ watch 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 }' 
+1

Creo que es la respuesta más correcta – Flow

+0

La respuesta más útil aquí. Especialmente el comando 'watch'. Sin embargo, tenga en cuenta que el uso de 'thcount' puede fallar para algunos (Red Hat ...), aunque' nlwp' funcionó para mí. – Peri461

1

Si está tratando de averiguar el número de subprocesos usando la 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 
1

La manera 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 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 "H TOP" de código fuente, lo encontrará here.

Cuestiones relacionadas