2008-11-06 27 views

risposta

6

JStack è piuttosto economico: un'opzione potrebbe essere il pipe dell'output tramite grep per trovare i thread attivi e quindi passare attraverso wc -l.

Più grafica è JConsole, che visualizza il numero di thread per un dato processo.

4

Le distribuzioni JDK più recenti vengono fornite con JConsole e VisualVM. Entrambi sono strumenti fantastici per ottenere i dettagli sporchi da un processo Java in esecuzione. Se devi farlo a livello di codice, investiga su JMX.

114

provare

ps huH p <PID_OF_U_PROCESS> | wc -l 

o htop

+2

Credo che dovresti sottrarre '1' da esso perché stampa una riga come' USER PID% CPU% MEM VSZ RSS TTY STAT START TIME COMANDO' per intestazione tabella. –

+1

La 'h' nasconde l'intestazione. – thinkmassive

+1

-1 Perché collegare l'output a 'wc' quando si potrebbe' ps -o il conteggio '? Vedi [questa risposta] (https://stackoverflow.com/a/37713259/194894). – Flow

6

Se si utilizza:

ps uH p <PID_OF_U_PROCESS> | wc -l 

si deve sottrarre 1 al risultato, come una delle linee "wc" è il conteggio è il intestazioni del comando "ps".

+0

Benvenuti in StackOverflow. Probabilmente, questo dovrebbe essere un commento alla risposta di slav0nic.Tuttavia, a quanto ho capito, quando ti iscrivi per la prima volta a SO, non puoi (ancora) commentare le risposte finché non hai acquisito una certa reputazione, quindi aggiungere una risposta è tutto ciò che puoi fare. Hai ragione; non dovresti contare la riga dell'intestazione da 'ps' come uno dei thread. –

38

Ogni thread in un processo crea una directory sotto /proc/<pid>/task. Contare il numero di directory e il numero di thread.

+0

Per aggiungere al commento sopra. È possibile utilizzare questo comando per trovare il numero di thread: 'find/proc//task -maxdepth 1 -type d -print | wc -l'. Basta sostituire lo _ _ con il tuo ID di processo che puoi ottenere da 'top' o usando' ps' – Navigatron

3

jvmtop può mostrare il conteggio del thread jvm corrente accanto ad altre metriche.

5

Ecco un comando che visualizza il numero di fili di un dato processo:

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

differenza degli altri ps risposte base, qui c'è alcuna necessità di sottrarre 1 dalla sua uscita in quanto non v'è alcun ps intestazione linea grazie all'opzione -o pid=.

16

ps -eLf sulla shell deve fornire un elenco di tutti i thread e processi attualmente in esecuzione sul sistema. Oppure, è possibile eseguire il comando top quindi premere "H" per alternare le voci di thread.

+0

Questa è la salsa per me. Non voglio limitarlo solo a un processo. È facile aggiungere un '-p' a questo se necessario, o qualsiasi altra cosa. Questo è il minimo necessario per visualizzare l'elenco di thread. –

+0

ps -eLf ha funzionato per me insieme a grep -c CashCow

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

o 'grep Threads/proc//status' –

0

Se siete interessati a quei fili che sono davvero attivi - come a fare qualcosa (non bloccato, non timed_waiting, non reporting "filo conduttore", ma in realtà in attesa di un flusso di conferire i dati) al contrario di stare seduti inattivo ma dal vivo - allora potresti essere interessato a jstack-active.

Questo semplice script bash esegue jstack quindi filtra tutti i thread che dall'euristica sembrano essere inattivi, mostrando le tracce dello stack per quei thread che stanno effettivamente consumando cicli della CPU.

0

VisualVM può mostrare stati chiari di fili di un dato processo JVM

enter image description here

+0

thrash autoindotto? dang! –

2

$ ps H p pid-id

H - elenca tutti i singoli fili in un processo

o

$cat /proc/pid-id/status

pid-id è l'ID di processo

ad es .. (troncato l'uscita in basso)

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

Per ottenere il numero di thread per un dato pid:

$ ps -o nlwp <pid> 

Dove nlwp stand per Numero di processi leggeri (fili). Così ps alias nlwp a thcount, il che significa che

$ ps -o thcount <pid> 

fa anche il lavoro.

Se si desidera monitorare il numero di thread, è sufficiente utilizzare watch:

$ watch ps -o thcount

Per ottenere la somma di tutti i thread in esecuzione nel sistema:

$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }' 
+1

Penso che sia la risposta più corretta – Flow

+0

La risposta più utile qui. Soprattutto il comando "guarda". Tuttavia, si noti che l'uso di 'thcount' può fallire per alcuni (Red Hat ...), anche se' nlwp' ha funzionato per me. – Peri461

1

Se si sta cercando di scoprire il numero di thread utilizzando cpu per un dato pid vorrei usare:

top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l 
1

Il modo più semplice è usare "htop". Puoi installare "htop" (una versione più elaborata di top) che ti mostrerà tutti i tuoi core, i processi e l'utilizzo della memoria.

Premere "MAIUSC + H" per mostrare tutto il processo o premere nuovamente per nasconderlo. Premere il tasto "F4" per cercare il nome del processo.

Installazione su Ubuntu o Debian:

sudo apt-get install htop 

Installazione su RedHat o CentOS:

yum install htop 
dnf install htop  [On Fedora 22+ releases] 

Se vuoi compilare "htop" dal codice sorgente, lo troverete here.

Problemi correlati