国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中抓取 Thread Dumps 的方式匯總

2019-11-26 14:10:58
字體:
來源:轉載
供稿:網友

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

主站蜘蛛池模板: 丹阳市| 左贡县| 承德市| 榆树市| 宝鸡市| 永宁县| 修文县| 青阳县| 深州市| 金华市| 衡东县| 枣庄市| 杭锦后旗| 广水市| 盐池县| 常德市| 太保市| 肇庆市| 抚松县| 班玛县| 巴里| 武强县| 斗六市| 驻马店市| 昆明市| 七台河市| 来安县| 沁阳市| 简阳市| 方正县| 广昌县| 奇台县| 洪雅县| 遂川县| 洛南县| 襄汾县| 莒南县| 原平市| 临沭县| 海南省| 民权县|