Contenu

Introduction

Conditions préalables

Conditions requises

Components Used

Conventions

Problème

Solution

Informations connexes

Introduction

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+.

Conditions préalables

Conditions requises

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.

Components Used

- Sun Java JRE 1.6+

- Sun Java JDK 1.6+

Conventions

Pour plus d'informations sur les conventions utilisées dans ce document, reportez-vous à Conventions relatives aux conseils techniques Cisco.

Problème

Parfois, le support doit capturer des données de thread de bas niveau qui ne figurent pas dans les journaux principaux.

Solution

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 .

1. 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:/#

2. 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)

3. 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]

Informations connexes

- Support et documentation techniques - Cisco Systems