目錄

簡介

必要條件

需求

採用元件

慣例

問題

解決方案

相關資訊

簡介

本文檔介紹如何使用Java jstack命令獲取Java堆棧轉儲。此過程在Windows、Linux和UNIX以及使用Oracle Sun Java 1.6+的任何Tidal系統上均有效。

必要條件

需求

Cisco建議您瞭解Java知識以及運行Java的作業系統。此外，需要在系統上安裝Java JDK(Java Development Kit)版本1.6+。

採用元件

- Sun Java JRE 1.6+

- Sun Java JDK 1.6+

慣例

如需文件慣例的詳細資訊，請參閱思科技術提示慣例。

問題

有時，支援人員需要捕獲主日誌中沒有的低級執行緒資料。

解決方案

要使用Oracle Sun提供的jstack工具捕獲Java堆疊轉儲，請完成以下步驟。

注意：Java進程必須運行Sun Java 1.6+才能運行jstack命令，並且必須在系統上安裝JDK。在此處下載Oracle Sun JDK 。

1. 在運行Java進程的電腦上查詢進程標識號。

- 在Windows電腦上，您可以使用工作管理員查詢進程標識號。

具體來說，PID是進程標識號。如果您沒有看到此列，請選擇View > Columns > PID（進程識別符號）以便新增它。

- 在UNIX/Linux上，可以發出ps -ef | grep UnixMaster命令以獲取進程ID:

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. 獲得所需的進程標識號後，轉至安裝Sun JDK的BIN目錄，然後發出jstack {PID} 命令，其中{PID}是進程標識號。這會將Java堆疊資訊列印到螢幕。

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. 若要將堆疊資訊重新導向至檔案，請使用將在Windows和Linux/UNIX中都能執行的檔案建立選項發出相同的命令：

jstack {PID} > [filename.out]

相關資訊

- 技術支援與文件 - Cisco Systems