程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中抓取 Thread Dumps 的方法匯總

Java中抓取 Thread Dumps 的方法匯總

編輯:關於JAVA

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 版本等等。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved