隨筆-37  評(píng)論-3271  文章-0  trackbacks-0

          如何抓取Thread Dump小結(jié)

           

          作者: 劉長(zhǎng)炯 BeanSoft@126.com 日期: 2011-11-28 本文環(huán)境: JDK 1.5/1.6, WebLogic 9.0 or later

           

          當(dāng)服務(wù)器掛起,崩潰或者性能底下時(shí),就需要抓取服務(wù)器的線程堆棧(Thread Dump)用于后續(xù)的分析.

          Thread dump提供了當(dāng)前活動(dòng)的線程的快照. 它提供了JVM中所有Java線程的棧跟蹤信息

          有很多方式可用于獲取Thread Dump, 一些是操作系統(tǒng)特定的命令.

           

          操作系統(tǒng)命令獲取ThreadDump:

           

          Windows:

          1.      轉(zhuǎn)向服務(wù)器的標(biāo)準(zhǔn)輸出窗口并按下Control + Break組合鍵, 之后需要將線程堆棧復(fù)制到文件中

          UNIX/ Linux

          首先查找到服務(wù)器的進(jìn)程號(hào)(process id), 然后獲取堆棧.

          1.      ps –ef  | grep java

          2.      kill -3 <pid>

           注意一定要謹(jǐn)慎, 一步不慎就可能讓服務(wù)器進(jìn)程被殺死!

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

          JDK自帶命令行工具獲取PID并做ThreadDump:

          1.         jps

          2.         jstack <pid>

          使用JVisualVM:

          Threads 標(biāo)簽頁(yè)àThreadDump按鈕.

           

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

          1. webLogic.Admin 工具

          a. 打開命令提示符, 通過運(yùn)行<DOMAIN_HOME>/bin/setDomain.env設(shè)置相關(guān)類路徑

          b. 執(zhí)行下面的命令

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

          注意: Thread Dump 會(huì)打印到標(biāo)準(zhǔn)輸出, nohup日志或者進(jìn)程窗口.

          2. 使用 Admin Console

          a. 登錄 Admin Console , 點(diǎn)擊對(duì)應(yīng)的服務(wù)器

          b. 點(diǎn)擊Server à Monitoring àThreads

          c. 點(diǎn)擊: Dump Thread Stack 按鈕

          3. 使用WLST (WebLogic Scripting Tool)

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

          cd(‘Servers’)

          cd(‘AdminServer’)

          threadDump()

          disconnect()

          exit()

          注意: 線程堆棧將會(huì)保存在運(yùn)行wlst的當(dāng)前目錄下.

           

          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. 如果服務(wù)器是作為Windows服務(wù)的方式運(yùn)行, 請(qǐng)運(yùn)行下列命令:

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

           

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

          $JAVA_HOME\demo\management\FullThreadDump

           

          posted on 2011-12-30 15:58 BeanSoft 閱讀(17122) 評(píng)論(1)  編輯  收藏 所屬分類: Java SEWebLogic

          評(píng)論:
          # re: 如何抓取Thread Dump小結(jié)[未登錄] 2012-10-17 15:55 | Jack
          概念搞錯(cuò)了!這是heap dump,pid,jps,jmap都是獲得heap dump  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南昌市| 霍林郭勒市| 河间市| 阿拉善右旗| 江陵县| 旌德县| 巨鹿县| 正镶白旗| 合阳县| 龙川县| 吴桥县| 肇源县| 广饶县| 稻城县| 台南市| 长丰县| 临邑县| 泸水县| 梁河县| 玉林市| 莱芜市| 衡南县| 微山县| 乌鲁木齐市| 静乐县| 达孜县| 余干县| 秀山| 岳阳市| 深州市| 饶平县| 嫩江县| 合阳县| 朝阳区| 仙居县| 清流县| 海丰县| 青神县| 都安| 吴忠市| 古交市|