如何抓取Thread Dump小結

當服務器掛起,崩潰或者性能底下時,就須要抓取服務器的線程堆棧(Thread Dump)用於後續的分析. java

Thread dump提供了當前活動的線程的快照. 它提供了JVM中全部Java線程的棧跟蹤信息 web

有不少方式可用於獲取Thread Dump, 一些是操做系統特定的命令. 編程

 

操做系統命令獲取ThreadDump: 服務器

 

Windows: 工具

1.      轉向服務器的標準輸出窗口並按下Control + Break組合鍵, 以後須要將線程堆棧複製到文件中 性能

UNIX/ Linux url

首先查找到服務器的進程號(process id), 而後獲取堆棧. spa

1.      ps –ef  | grep java 操作系統

2.      kill -3 <pid> .net

 注意必定要謹慎, 一步不慎就可能讓服務器進程被殺死! 

JVM 自帶的工具獲取線程堆棧:

JDK自帶命令行工具獲取PID並作ThreadDump:

1.         jps

2.         jstack <pid>

使用JVisualVM:

Threads 標籤頁àThreadDump按鈕.

 

WebLogic 自帶的獲取 thread dump的工具:

1. webLogic.Admin 工具

a. 打開命令提示符, 經過運行<DOMAIN_HOME>/bin/setDomain.env設置相關類路徑

b. 執行下面的命令

java weblogic.Admin -url t3://localhost:7001 -username weblogic -password weblogic1 THREAD_DUMP

注意: Thread Dump 會打印到標準輸出, nohup日誌或者進程窗口.

2. 使用 Admin Console

a. 登陸 Admin Console , 點擊對應的服務器

b. 點擊Server à Monitoring àThreads

c. 點擊: Dump Thread Stack 按鈕

3. 使用WLST (WebLogic Scripting Tool)

connect(‘weblogic’,'weblogic1’,’t3://localhost:7001’)

cd(‘Servers’)

cd(‘AdminServer’)

threadDump()

disconnect()

exit()

注意: 線程堆棧將會保存在運行wlst的當前目錄下.

 

4. 使用utils.ThreadDumper

用法:

C:\bea\wlserver_10.3\server\lib>java -cp weblogic.jar utils.ThreadDumper

Broadcast Thread dumps disabled: must specify weblogic.debug.dumpThreadAddr and

weblogic.debug.dumpThreadPort

Exception in thread "main" java.lang.IllegalArgumentException: Port out of range

:-1

        at java.net.DatagramPacket.setPort(Unknown Source)

        at java.net.DatagramPacket.<init>(Unknown Source)

        at java.net.DatagramPacket.<init>(Unknown Source)

        at utils.ThreadDumper.sendDumpMsg(ThreadDumper.java:124)

        at utils.ThreadDumper.main(ThreadDumper.java:145)

 

5. 若是服務器是做爲Windows服務的方式運行, 請運行下列命令:

WL_HOME\bin\beasvc -dump -svcname:service-name

 

其它一些獲取Thread Dump的工具備jrcmd, jrmc(JRockit VM自帶) ,Samurai, JProfiler, 還可經過JMX編程的方式獲取, JDK自帶示例代碼:

$JAVA_HOME\demo\management\FullThreadDump

相關文章
相關標籤/搜索