一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java中抓取 Thread Dumps 的方式匯總

Java中抓取 Thread Dumps 的方式匯總

2020-05-18 11:51java教程網 JAVA教程

Thread dumps(線程轉儲)能幫助我們判斷 CPU 峰值、死鎖、內存異常、應用反應遲鈍、響應時間變長和其他系統問題。在這篇文章當中,總結了7中抓取 Java Thread Dumps 文件的方式,分享給大家,希望對大家學習Java能夠有所幫助。

Thread dumps(線程轉儲)能幫助我們判斷 CPU 峰值、死鎖、內存異常、應用反應遲鈍、響應時間變長和其他系統問題。一些在線的分析工具比如 http://fastthread.io/ 也能幫助我們分析和定位問題,但是這些工具都要求有一個 dump 文件。因此在這篇文章當中,我總結了7中抓取 Java Thread Dumps 文件的方式。

1. jstack

jstack 是一個抓取 thread dump 文件的有效的命令行工具,它位于 JDK 目錄里的 bin 文件夾下(JDK_HOME\bin),以下是抓取 dump 文件的命令:

?
1
jstack -l <pid> > <file-path>

說明:

pid: Java 應用的進程 id ,也就是需要抓取 dump 文件的應用進程 id。

file-path: 保存 dump 文件的路徑。

示例:

?
1
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 文件。

Java中抓取 Thread Dumps 的方式匯總

點擊上圖的進程名稱對應的 Thread Dump 按鈕,將會生成 dump 文件,如下圖所示:

Java中抓取 Thread Dumps 的方式匯總

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,你會看到以下的對話框:

Java中抓取 Thread Dumps 的方式匯總

在 Thread Dump 下拉框,你可以選擇生成 dump 文件的時間間隔。在上面的例子里,每隔60秒將會生成一個 dump 文件。選擇完成之后啟動 Flight recorder ,可以在 Threads 面板看到 dump 文件的內容:

Java中抓取 Thread Dumps 的方式匯總

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 文件的主要實現:

?
1
2
3
4
5
6
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.


Java中抓取 Thread Dumps 的方式匯總

總結

盡管我在前面列出了7種抓取 dump 文件的方式,但恕我直言,jstack 和 kill -3 是最好的選擇,原因如下:

a. 簡單,容易實現;

b. 通用:在大多數情況下,不管操作系統類型、Java 廠商、JVM 版本等等。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美日韩在线播放 | 国产麻豆传媒在线观看 | 成人欧美一区在线视频在线观看 | 鬼畜重口高h合集长短篇 | 操的我好爽| 99在线免费观看视频 | 亚洲AV 日韩 国产 有码 | 国产亚洲高清国产拍精品 | 桃色综合网 | 日老逼 | 欧美成人v视频免费看 | 16男男gaygays | 丫鬟粗大狠狠贯穿h | 国产伦精品一区二区 | 国产卡一卡二卡三乱码手机 | 天天综合色天天综合网 | 唯美 清纯 另类 亚洲制服 | 国产成人理在线观看视频 | 236zz宅宅最新伦理 | 久久精品亚洲国产AV涩情 | 国产清纯91天堂在线观看 | 我要看逼 | 无码一区国产欧美在线资源 | 五月婷婷丁香在线视频 | 呜呜别塞了啊抽插 | 91精品国产高清久久久久久io | 魔镜号中文字幕 | 果冻传媒在线观看的 | 成人一级黄色大片 | 免费一级特黄特色大片在线观看 | 秒播影视 午夜福利毛片 | 国产一区精品视频 | 天天舔天天干 | 精品国产国产精2020久久日 | 91国内精品线免费播放 | 青青草原在线 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 欧美激情综合 | 欧美一区二区三区在线观看免费 | 免费看隐私美女 | 丁香六月色婷婷综合网 |