J'utilise la kill -3
commande pour voir le vidage des threads de la JVM sous Unix. Mais où puis-je trouver la sortie de cette kill
commande? Je suis perdu!!
java
multithreading
dump
Javanerd
la source
la source
Réponses:
Vous pouvez également utiliser jstack (inclus avec JDK) pour effectuer un vidage de thread et écrire la sortie où vous le souhaitez. N'est-ce pas disponible dans un environnement unix?
la source
Le vidage de thread est écrit sur le système à partir de la machine virtuelle sur laquelle vous avez exécuté le fichier
kill -3
. Si vous redirigez la sortie de console de la JVM vers un fichier, le vidage de threads sera dans ce fichier. Si la JVM s'exécute dans une console ouverte, le vidage des threads sera affiché dans sa console.la source
Il existe un moyen de rediriger la sortie de vidage de thread JVM sur le signal de rupture vers un fichier séparé avec l'option de diagnostic LogVMOutput :
la source
Avec Java 8 en image,
jcmd
c'est l'approche préférée.Voici l'extrait de la documentation Oracle :
La sortie de JDK 8 a introduit Java Mission Control, Java Flight Recorder et l'utilitaire jcmd 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 réduction des performances.
Cependant, l'expédition de ceci avec l'application peut avoir des implications de licence dont je ne suis pas sûr.
la source
jcmd
ne parvient pas à se connecter au processus de service Windows aveccom.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
whilejstack -F
réussit: stackoverflow.com/questions/1197912/…Au même endroit où la sortie standard de la JVM est placée. Si vous avez un serveur Tomcat, ce sera le
catalina_(date).out
fichier.la source
Lorsque vous utilisez kill -3, vous devriez voir le vidage de thread 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 threads:
kill -3 <PID>
: Donne la sortie à la sortie standard.Pour les machines virtuelles hotspot, nous pouvons également utiliser la
jstack
commande pour générer un vidage de thread. Cela fait partie du JDK. La syntaxe est la suivante:la source
kill -3 <PID>
devrait pas tuer la JVM. Quel type d'application Java recherchez-vous?Dans Jboss, vous pouvez effectuer les opérations suivantes
Cela redirigera votre sortie / threadump vers la console de fichiers spécifiée dans la commande ci-dessus.
la source
la source
Étapes à suivre si vous souhaitez effectuer le vidage des threads de votre processus Java autonome
Étape 1: Obtenez l'ID de processus pour le script shell appelant le programme java
Étape 2: Obtenez l'ID de processus pour l'enfant qui a été appelé par le runABCD. Utilisez le PID ci-dessus pour obtenir les enfants.
Étape 3: Obtenez le JSTACK pour le processus particulier. Obtenez l'ID de processus de votre processus XYSServer. soit 8536
la source