目录

简介

先决条件

要求

使用的组件

规则

问题

解决方案

相关信息

简介

本文档介绍如何使用Java jstack命令获取Java堆栈转储。此过程在Windows、Linux和UNIX以及使用Oracle Sun Java 1.6+版的任何Tidal系统上均有效。

先决条件

要求

思科建议您了解Java并了解运行Java的操作系统。此外，系统上还需要安装Java JDK（Java开发工具包）1.6+版。

使用的组件

- Sun Java JRE 1.6+

- Sun Java JDK 1.6+

规则

有关文档规则的详细信息，请参阅 Cisco 技术提示规则。

问题

有时，支持人员需要捕获主日志中未包含的低级线程数据。

解决方案

要使用Oracle Sun提供的jstack工具捕获Java堆栈转储，请完成以下步骤。

注意：要运行jstack命令，Java进程必须运行Sun Java 1.6+，并且必须在系统上安装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