Java中抓取 Thread Dumps 的方法匯總。本站提示廣大學習愛好者:(Java中抓取 Thread Dumps 的方法匯總)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中抓取 Thread Dumps 的方法匯總正文
Thread dumps(線程轉儲)能贊助我們斷定 CPU 峰值、逝世鎖、內存異常、運用反響緩慢、呼應時光變長和其他體系成績。一些在線的剖析對象好比 http://fastthread.io/ 也能贊助我們剖析和定位成績,然則這些對象都請求有一個 dump 文件。是以在這篇文章傍邊,我總結了7中抓取 Java Thread Dumps 文件的方法。
1. jstack
jstack 是一個抓取 thread dump 文件的有用的敕令行對象,它位於 JDK 目次裡的 bin 文件夾下(JDK_HOME\bin),以下是抓取 dump 文件的敕令:
jstack -l <pid> > <file-path>
解釋:
pid: Java 運用的過程 id ,也就是須要抓取 dump 文件的運用過程 id。
file-path: 保留 dump 文件的途徑。
示例:
jstack -l 37320 > /opt/tmp/threadDump.txt
下面的例子演示了用 jstack 生成 dump 文件到 /opt/tmp/threadDump.txt 目次下。
從 Java5 開端,jstack 被包括進了 jdk 傍邊,假如你應用老版本的 jdk,要斟酌應用其他方法。
2. Kill -3
處於平安方面的斟酌,有一部門臨盆情況的機械只包括 JRE 情況,是以就不克不及應用 jstack 對象了,在這類情形下,我們可使用 kill -3 的方法:
kill -3 <pid>
解釋:
pid: Java 運用的過程 id ,也就是須要抓取 dump 文件的運用過程 id 。
示例:
kill -3 37320
當應用 kill -3 生成 dump 文件時,dump 文件會被輸入到尺度毛病流。假設你的運用運轉在 tomcat 上,dump 內容將被發送到<TOMCAT_HOME>/logs/catalina.out 文件裡。
3. JVisualVM
Java VisualVM 是一個可以供給 JVM 信息的圖形界面對象。它位於 JDK_HOME\bin\jvisualvm.exe 文件裡。從 JDK6 Update7 開端,它被包括進 JDK 裡。
運轉 jvisualvm,在左邊面板中(以下圖所示),列出了運轉的 JVM 信息,這個對象可以從當地或許長途運轉的 JVM 裡抓取 dump 文件。
點擊上圖的過程稱號對應的 Thread Dump 按鈕,將會生成 dump 文件,以下圖所示:
4. JMC
Java Mission Control (JMC) 是一個能從當地或臨盆情況中搜集和剖析數據的對象,從 Oracle JDK 7 Update 40 開端,它被包括進 JDK 裡,它可以從 JVM 裡生成 dump 文件。JMC 位於 JDK_HOME\bin\jmc.exe 文件裡:
運轉該對象以後,你可以看到運轉在當地的 Java 過程,它也能夠銜接到長途機械。雙擊你想要生成 dump 文件的 Java 過程,點擊Flight Recorder,你會看到以下的對話框:
在 Thread Dump 下拉框,你可以選擇生成 dump 文件的時光距離。在下面的例子裡,每隔60秒將會生成一個 dump 文件。選擇完成以後啟動 Flight recorder ,可以在 Threads 面板看到 dump 文件的內容:
5. Windows (Ctrl + Break)
這類方法僅僅在 Windows 操作體系上有用:
在掌握台窗口上選中敕令行
在敕令行窗口上按 “Ctrl + Break” 敕令
然後會生成 dump 文件,dump 文件的內容會被打印在敕令行窗口上。
留意1: 有幾款筆記本(好比 Lenovo T 系列)曾經撤消了 “Break” 鍵,在這類情形下你不能不用谷歌搜刮與 Break 鍵功效相似的鍵,我發明 “Function key + B” 鍵與 Break 鍵的功效雷同,是以我用 “Ctrl + Fn + B” 鍵來生成 dump 文件。
留意2: 用上述方法有一個缺陷就是 dump 文件的內容會被打印到掌握台上,沒有 dump 文件的話,我們很難用剖析對象好比http://fasthread.io來剖析 dump 文件。是以你可使用以下敕令將 dump 文件的內容輸入到文本文件傍邊,好比你的運用法式名字叫 SampleThreadProgram ,那末平日應用的敕令以下:
java -classpath . SampleThreadProgram
將 dump 文件的內容輸入到文本文件的敕令以下:
java -classpath . SampleThreadProgram > C:\workspace\threadDump.txt 2>&1
當你按下 “Ctrl + Break” 鍵以後,dump 文件會被保留到 C:\workspace\threadDump.txt 裡。
6. ThreadMXBean
從 JDK 1.5 開端,ThreadMXBean 被引入。這是 JVM 的治理接口,應用這個接口你僅須要大批的代碼就可以生成 dump 文件,以下是應用 ThreadMXBean 生成 dump 文件的重要完成:
public void dumpThreadDump() { ThreadMXBean threadMxBean = ManagementFactory.getThreadMXBean(); for (ThreadInfo ti : threadMxBean.dumpAllThreads(true, true)) { System.out.print(ti.toString()); } }
7. APM Tool – App Dynamics
一些運用機能監控對象供給了生成 dump 文件的功效,假如你應用 App Dynamics 監控你的運用,以下就是生成 dump 文件的步調:
翻開創立舉措窗口,在創立舉措窗口當選擇 Diagnostics->Take a thread dump;
輸出舉措稱號、抓取 dump 文件的數目、抓取 dump 文件的時光距離(毫秒);
假如你想在抓取 dump 舉措開端之前履行一些操作,那末你可以選中 Require approval executing before this Action 這個復選框,然後輸出小我或小組的 email 地址;
點擊 OK.
總結
雖然我在後面列出了7種抓取 dump 文件的方法,但恕我婉言,jstack 和 kill -3 是最好的選擇,緣由以下:
a. 簡略,輕易完成;
b. 通用:在年夜多半情形下,不論操作體系類型、Java 廠商、JVM 版本等等。