Ce document décrit comment obtenir un vidage de pile Java à l'aide de la commande Java jstack. Ce processus est valide sous Windows, Linux et UNIX, ainsi que sur tous les systèmes Tidal utilisant Oracle Sun Java version 1.6+.
Cisco vous recommande d'avoir des connaissances Java et du système d'exploitation sur lequel Java s'exécute. En outre, Java JDK (Java Development Kit) version 1.6+ devra être installé sur le système.
Sun Java JRE 1.6+
Sun Java JDK 1.6+
Pour plus d'informations sur les conventions utilisées dans ce document, reportez-vous à Conventions relatives aux conseils techniques Cisco.
Parfois, le support doit capturer des données de thread de bas niveau qui ne figurent pas dans les journaux principaux.
Afin de capturer un vidage de pile Java à l'aide de l'outil jstack fourni par Oracle Sun, complétez ces étapes.
Remarque : Le processus Java doit exécuter Sun Java 1.6+ pour exécuter la commande jstack, et le JDK doit être installé sur le système. Téléchargez Oracle Sun JDK ici .
Recherchez le numéro d'identification du processus sur l'ordinateur exécutant le processus Java.
Sur un ordinateur Windows, vous pouvez utiliser le Gestionnaire des tâches pour rechercher le numéro d'identification du processus.
Plus précisément, le PID est le numéro d'identification du processus. Si vous ne voyez pas cette colonne, sélectionnez Affichage > Colonnes >PID (identificateur de processus) afin de l'ajouter.
Sous UNIX/Linux, vous pouvez émettre le ps -ef | grep UnixMaster afin d'obtenir l'ID de processus :
root@sunts06:/# ps -ef | grep UnixMaster root 5452 5423 0 14:43:21 pts/14 0:00 grep UnixMaster root 1868 1 0 Jun 09 ? 31:49 /usr/bin/java -DN=UnixMaster -DTI DAL_HOME=/opt/TIDAL/master/bin/.. -Xms256m -Xm root@sunts06:/#
Une fois que vous avez le numéro d'identification du processus dont vous avez besoin, accédez au répertoire BIN où le Sun JDK est installé et émettez la commande jstack {PID} où {PID} est le numéro d'identification du processus. Ceci imprimera les informations de la pile Java à l'écran.
C:\Program Files\Java\jdk1.6.0_25\bin>jstack 3724 2011-06-30 20:07:37 Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.0-b11 mixed mode): "Swing-Shell" daemon prio=6 tid=0x0000000006cce800 nid=0x1bd8 waiting on conditi on [0x000000000843f000] java.lang.Thread.State:WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000fb38ace8> (a java.util.concurrent.lock s.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(Unknown Source) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject .await(Unknown Source) at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source) at java.util.concurrent.ThreadPoolExecuter.getTask(Unknown Source) at java.util.concurrent.ThreadPoolExecuter$Worker.run(Unknown Source) at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Unknown Source) at java.lang.Thread.run(Unknown Source) "Thread-2" prio=6 tid=0x0000000006cd0800 nid=0xe6c waiting on condition [0x00000 0000833f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method)
Afin de rediriger les informations de la pile vers un fichier, émettez la même commande avec l'option de création de fichier qui fonctionnera à la fois sous Windows et Linux/UNIX :
jstack {PID} > [filename.out]