標籤:blog http io ar os 使用 sp java on
當伺服器掛起,崩潰或者效能底下時,就需要抓取伺服器的線程堆棧(Thread Dump)用於後續的分析.
Thread dump提供了當前活動的線程的快照. 它提供了JVM中所有Java線程的棧跟蹤資訊
有很多方式可用於擷取Thread Dump, 一些是作業系統特定的命令.
作業系統命令擷取ThreadDump:
Windows:
1. 轉向伺服器的標準輸出視窗並按下Control + Break按鍵組合, 之後需要將線程堆棧複製到檔案中
UNIX/ Linux
首先尋找到伺服器的進程號(process id), 然後擷取堆棧.
1. ps –ef | grep java
2. kill -3 <pid>
注意一定要謹慎, 一步不慎就可能讓伺服器處理序被殺死!
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
http://www.blogjava.net/beansoft/archive/2011/12/30/367584.html
http://blog.sina.com.cn/s/blog_5f53615f0100zllb.html
http://www.blogjava.net/jzone/articles/303979.html
http://blog.sina.com.cn/s/blog_6ed93640010114a4.html
如何抓取Thread Dump小結(轉)