2009年3月15日星期日

WLS_032:Thread Dump 是啥东东?

故障诊断中经常用到的手段之一就是Thread Dump,因此有必要在这里介绍一下。
我们知道,在一个JVM中有很多Java线程在运行着,如果想要知道这些线程眼下都在干什么,就需要给这些活动线程的拍个照,这就是 Thread Dump。

1. 启动Thread Dump的命令
(1)在 Unix 平台上
kill -3 <PID>
(2)在 Windows 平台上
设置DOS 窗口的属性:Layout -> Screen Buffer Size-> Height 9999。
同时按下CTRL-BREAK
(3)对于WebLoigc Server,还可使用java weblogic.Admin –url t3://localhost:7001 –username user –password password THREAD_DUMP
注意,使用该方法的前提条件是Server可以Ping通。

2. 查看 Thread Dump
Thread Dump是一个可读的文本,当然看起来还是费些功夫的。
首先你要找到Thread Dump的最开始的位置:"Full thread dump. "。

3. 获取失败时刻的Thread Dump
启动 JVM 时,加入参数:
(1)Sun JVM:-XX:+ShowMessageBoxOnError
(2)JRockit JVM:-Djrockit.waitonerror
当JVM崩溃时,会弹出窗口:
Do you want to debug the problem
此时不要选择Yes/No,而是去获取此刻的Thread Dump。
注意,使用此种方法,Server要运行在前台(foreground)。

没有评论: