kill -3 pour obtenir java thread dump


J'utilise la commande kill -3 pour voir le vidage de threads de la JVM sous unix. Mais où puis-je trouver la sortie de cette commande kill? Je suis perdu!!

Author: Leos Literak, 2011-02-02

9 answers

Vous pouvez également utiliser jstack (inclus avec JDK) pour prendre un vidage de thread et écrire la sortie où vous voulez. N'est-ce pas disponible dans un environnement unix?

jstack PID > outfile
 164
Author: Joshua McKinnon, 2011-02-02 15:45:04

Le vidage de thread est écrit sur le système à partir de la machine virtuelle sur laquelle vous avez exécuté le kill -3. Si vous redirigez la sortie de console de la JVM vers un fichier, le vidage de thread sera dans ce fichier. Si la JVM s'exécute dans une console ouverte, le vidage des threads sera affiché dans sa console.

 34
Author: Kris Babic, 2011-02-02 15:36:18

Il existe un moyen de rediriger la sortie de vidage de thread JVM sur le signal de rupture pour séparer le fichier avec Option de diagnostic LogVMOutput :

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
 26
Author: Vadzim, 2013-01-17 06:30:57

Avec Java 8 dans l'image, jcmd est l'approche préférée.

jcmd <PID> Thread.print

Voici l'extrait de Documentation Oracle :

La sortie de JDK 8 a introduit Java Mission Control, Java Flight Recorder et jcmd utility pour diagnostiquer les problèmes avec les applications JVM et Java. Il est suggéré d'utiliser le dernier utilitaire, jcmd au lieu de l'utilitaire jstack précédent pour des diagnostics améliorés et une surcharge de performances réduite.

Cependant, l'expédition de ce avec la demande peut être des implications de licence dont je ne suis pas sûr.

 20
Author: Arnab Biswas, 2015-12-06 09:16:22

Au même endroit où la sortie standard de la JVM est placée. Si vous avez un serveur Tomcat, ce sera le fichier catalina_(date).out.

 8
Author: Daniel, 2011-02-02 15:31:00

Lors de l'utilisation de kill -3, il faut voir le vidage des threads dans la sortie standard. La plupart des serveurs d'applications écrivent la sortie standard dans un fichier séparé. Vous devriez le trouver là lorsque vous utilisez kill -3. Il existe plusieurs façons d'obtenir des vidages de threads:

  • Tuer -3 : Donne la sortie standard.
  • Si l'on a accès à la fenêtre de la console où le serveur est en cours d'exécution, on peut utiliser la combinaison de touches Ctrl+Break pour générer la trace de la pile sur la sortie std.
  • Pour hotspot VM nous pouvons également utiliser la commande jstack pour générer un vidage de threads. C'est une partie du JDK. La syntaxe est comme suit: Utilisation: jstack [- l ]( pour se connecter au processus en cours) jstack -F [-m] [-l] (pour se connecter à un processus bloqué)
  • Pour JRockit JVM, nous pouvons utiliser la commande JRCMD qui vient avec la syntaxe JDK: jrcmd [ []] [-l] [-f file] [- p] - h]
 7
Author: Apoorve, 2014-04-08 04:31:10

Dans Jboss, vous pouvez effectuer les opérations suivantes

nohup $JBOSS_HOME/bin/run.sh -c  yourinstancename $JBOSS_OPTS >> console-$(date +%Y%m%d).out  2>&1 < /dev/null &
kill -3 <java_pid>

Cela redirigera votre sortie/threadump vers la console de fichiers spécifiée dans la commande ci-dessus.

 2
Author: anish, 2013-09-24 19:05:40
  1. Trouver l'id de processus [PS ID]
  2. Exécuter le thread jcmd [PS ID].imprimer
 2
Author: Mehmet Erdemsoy, 2015-06-25 13:09:24

Étapes à suivre si vous voulez le vidage de threads de votre processus Java autonome

Étape 1: Obtenez l'ID de processus pour le script shell appelant le programme java

linux$ ps -aef | grep "runABCD"

user1  **8535**  4369   0   Mar 25 ?           0:00 /bin/csh /home/user1/runABCD.sh

user1 17796 17372   0 08:15:41 pts/49      0:00 grep runABCD

Étape 2: Obtenez l'ID de processus pour l'enfant qui a été appelé par runABCD. Utilisez le PID ci-dessus pour obtenir les enfants.

linux$ ps -aef | grep **8535**

user1  **8536**  8535   0   Mar 25 ?         126:38 /apps/java/jdk/sun4/SunOS5/1.6.0_16/bin/java -cp /home/user1/XYZServer

user1  8535  4369   0   Mar 25 ?           0:00 /bin/csh /home/user1/runABCD.sh

user1 17977 17372   0 08:15:49 pts/49      0:00 grep 8535

Étape 3: Obtenez le JSTACK pour le processus particulier. Obtenez l'id de processus de votre processus XYSServer. c'est à dire 8536

linux$ jstack **8536** > threadDump.log
 1
Author: Nick, 2015-12-18 09:00:30