Prenez des décharges de fil à partir d'une machine virtuelle Java

Un vidage de fil est une liste de tous les threads Java qui sont actuellement actifs dans une machine virtuelle Java (JVM).

Il y a plusieurs façons de prendre des décharges de fil d'une machine virtuelle Java. Il est fortement recommandé de prendre plus de 1 décharge de fil. Une bonne pratique est de prendre 10 décharges de fil à un intervalle régulier (par exemple, une décharge de fil toutes les dix secondes).






Étape 1: Obtenez le PID de votre processus Java

La première information vous devez être en mesure d'obtenir une décharge de fil est le PID de votre processus Java.

Les navires Java JDK avec commande JPS qui énumère tous les processus Java. Ids Vous pouvez exécuter cette commande comme ceci:

JPS -l 70660 70305 sun.tools.jps.Jps

Si cela ne fonctionne pas ou vous ne pouvez toujours pas trouver votre processus de Java, (chemin pas défini, pas installé JDK, ou une version antérieure de Java), l'utilisation

  • UNIX, Linux et Mac OS X: ps -el | grep java
  • Windows: Appuyez sur Ctrl + Maj + Echap pour ouvrir le gestionnaire de tâches et trouver le PID du processus Java

Étape 2: Demander un vidage de fil de la machine virtuelle Java

Si elle est installée / disponible, nous vous recommandons d'utiliser l'outil de jstack. Il imprime fil des décharges à la console de ligne de commande.

Pour obtenir une décharge de fil à l'aide jstack, exécutez la commande suivante:
jstack -l

Vous pouvez sortir fil consécutifs dépotoirs à un fichier en utilisant la console de redirection / append directive:
jstack -l >> threaddumps.log

  • L'outil est disponible depuis jstack JDK 1.5 (pour machine virtuelle Java sous Windows, il est disponible dans certaines versions de JDK 1.5 et JDK 1.6 uniquement).
  • jstack fonctionne même si le paramètre est activé jvm -Xrs
  • Il est impossible d'utiliser l'outil de jstack de JDK 1.6 pour prendre threaddumps d'un processus en cours d'exécution sur JDK 1.5.
  • Sous Linux et UNIX, vous devez exécuter la commande que l'utilisateur qui possède le processus java:
    -u sudo jstack -l
    ( devrait être remplacé par l'identifiant de l'utilisateur que le processus Java est en cours d'exécution comme)
  • Sous Windows, si vous exécutez jstack et obtenir l'erreur « Pas assez de stockage est disponible pour traiter cette commande », vous devez exécuter jstack comme les fenêtres utilisateur du système ou l'utilisateur qui possède le processus java. Vous pouvez le faire en utilisant PsExec que vous pouvez télécharger ici. Pour exécuter jstack en tant qu'utilisateur SYSTEM, utilisez une commande comme ceci:
    psexec -s jstack >> threaddumps.log
    Si vous ne parvenez pas à installer psexec sur le serveur, vous pouvez créer un fichier .bat contenant la commande et l'exécuter en utilisant le planificateur de tâches de Windows (comme un autre utilisateur).
  • Parfois, il est nécessaire d'ajouter l'option -J-D64 sur les systèmes 64 bits, par exemple:
    jstack -J-d64 -l >> threaddumps.log






jstack scénario

Voici un script, tiré de eclipse.org qui prendra une série de fil en utilisant décharges jstack. Il faut aussi l'utilisation du niveau de fil de cpu en utilisant la commande supérieure ainsi.

#! / Bin / bash
si [$ # -eq 0]; puis
echo> -2 « Utilisation: jstackSeries [ [ ]] »
echo> -2 "valeurs par défaut: COUNT = 10, retard = 0,5 (secondes)"
1 sortie
Fi
pid = 1 $ # requis
user = 2 # $ requis
count = $ # par défaut à 10 fois
retard = $ # par défaut à 0,5 secondes
tandis que [$ count -gt 0]
faire
Le sommet de l'utilisateur $ sudo -H -p -b -n1 $ pid> top pid $ (date +% H% M% S.% N).. -
sudo -u $ utilisateur jstack -l $ pid> jstack. $ pid. $ (date +% H% M% S% N)
sommeil retard $
laissez count--
echo -n ""
terminé

Il suffit de l'exécuter comme ceci:
sh jstackSeries.sh [pid] [cq5serveruser] [count] [délai]

Par exemple:
sh jstackSeries.sh 1234 cq5serveruser 10 3

  • 1234 est le pid du processus Java
  • cq5serveruser est l'utilisateur Linux ou UNIX que le processus Java fonctionne comme
  • 10 est le nombre de fils dépotoirs à prendre
  • 3 est le délai entre chaque décharge

Fil outil de vidage pour Adobe Experience Directeur

Si vous utilisez Adobe produit Experience Manager vous pouvez installer cet outil pour avoir une interface utilisateur simple pour générer des décharges de fil.

moyens d'obtenir une décharge de fil

Si l'outil de jstack n'est pas disponible pour vous, alors vous pouvez prendre des décharges de fil comme suit:

Remarque: Certains outils ne peuvent pas prendre fil décharges de la machine virtuelle Java si le paramètre de ligne de commande -Xrs est activée. Si vous rencontrez des difficultés à prendre fil décharges alors s'il vous plaît voir si cette option est activée.

UNIX, Mac OS X et Linux (1.4 ou une version JDK moins)

Sous UNIX, Mac OS X et Linux, vous pouvez envoyer un signal QUIT au processus Java pour le dire à la sortie d'une décharge de fil sur la sortie standard.

  1. Télécharger javadump.exe (ci-joint).
  2. Démarrez la machine virtuelle Java avec ces trois arguments (ils doivent être dans l'ordre):
    -XX: + UnlockDiagnosticVMOptions -XX: + LogVMOutput -XX: LogFile = C: mpjvmoutput.log
  3. Appuyez sur Ctrl + Maj + Echap pour ouvrir le Gestionnaire des tâches.
  4. Trouver le PID du processus Java.
  5. A partir de la ligne de commande, exécutez
    javadump.exe [pid]
  6. Le vidage de fil apparaît dans le fichier jvmoutput.log mentionné à l'étape 2.

Obtenez un vidage de fil de l'outil jconsole, en utilisant un plug-in: [0]

Voici comment vous pouvez demander une décharge de fil:

S'applique à

Tous les produits Adobe en cours d'exécution dans une machine virtuelle Java







Articles Liés