2012-05-25 5 views

risposta

27

Provare con jstack. Ti fornirà un elenco completo di ciò che stanno facendo i tuoi thread. Tutto ciò di cui ha bisogno è il processo di pid.

+0

io non sono sicuro se questo aiuta nel mio caso, ma lo fa rispondere alla domanda http: // pastebin.com/r1e0dtzp – sorin

+0

Si riduce in una certa misura. Se si utilizza il 100% della CPU, si desidera cercare i thread che non si trovano nello stato BLOCCO. Ad esempio Thread 30609 è sun.nio.ch.EPollArrayWrapper.epollWait che potrebbe potenzialmente corrispondere [questo difetto] (https://issues.apache.org/jira/browse/DIRMINA-678) a seconda della configurazione. – mprivat

+0

Recentemente il jstack ha smesso di funzionare e non sono sicuro del perché. Ecco la domanda correlata http://stackoverflow.com/questions/31179544/did-the-jstack-stopped-working-on-newer-jdk8-versions – sorin

2

Dai uno sguardo allo VisualVM. Ci sono molti strumenti di profilazione e puoi eseguire un dump del thread.

8

Prendere una discarica di filo. Connettiti tramite Visual VM e richiedi un dump. O se su unix poi kill -3 pid o su windows Ctrl + Break sulla console di processo lo farebbe per te. La discarica va direttamente alla console. Puoi anche usare jstack per lanciare una discarica.

+0

kill -3 pid funziona alla grande, grazie! Per quelli che hanno una JVM in esecuzione su "schermo": ctrl-a H (maiuscolo) avvia/interrompe la registrazione su un file. – schieferstapel

3

In * nix, con top premendo H è possibile visualizzare i thread.

Quindi con jps è possibile visualizzare lo pid tenendo presente che se il processo è stato avviato con privilegi, è necessario eseguirlo con sudo, ad esempio.

Se si prende l'id del thread e lo si converte in esadecimale, è possibile incrociare i dati con l'output jstack pid.

Entrambi gli strumenti sono in $JAVA_HOME/bin.

4

Ctrl+\ su linux (che invia SIGQUIT)

Ctrl+Break sulle finestre (che invia SIGBREAK sotto MSVCRT)