欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中抓取 Thread Dumps 的方式匯總

 更新時(shí)間:2016年06月16日 09:16:28   投稿:hebedich  
Thread dumps(線程轉(zhuǎn)儲(chǔ))能幫助我們判斷 CPU 峰值、死鎖、內(nèi)存異常、應(yīng)用反應(yīng)遲鈍、響應(yīng)時(shí)間變長和其他系統(tǒng)問題。在這篇文章當(dāng)中,總結(jié)了7中抓取 Java Thread Dumps 文件的方式,分享給大家,希望對(duì)大家學(xué)習(xí)Java能夠有所幫助。

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

1. jstack

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

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

說明:

pid: Java 應(yīng)用的進(jìn)程 id ,也就是需要抓取 dump 文件的應(yīng)用進(jìn)程 id。

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

示例:

jstack -l 37320 > /opt/tmp/threadDump.txt

上面的例子演示了用 jstack 生成 dump 文件到 /opt/tmp/threadDump.txt 目錄下。

從 Java5 開始,jstack 被包含進(jìn)了 jdk 當(dāng)中,如果你使用老版本的 jdk,要考慮使用其他方式。

2. Kill -3

處于安全方面的考慮,有一部分生產(chǎn)環(huán)境的機(jī)器只包含 JRE 環(huán)境,因此就不能使用 jstack 工具了,在這種情況下,我們可以使用 kill -3 的方式:

kill -3 <pid>

說明:

pid: Java 應(yīng)用的進(jìn)程 id ,也就是需要抓取 dump 文件的應(yīng)用進(jìn)程 id 。
示例:

kill -3 37320
當(dāng)使用 kill -3 生成 dump 文件時(shí),dump 文件會(huì)被輸出到標(biāo)準(zhǔn)錯(cuò)誤流。假如你的應(yīng)用運(yùn)行在 tomcat 上,dump 內(nèi)容將被發(fā)送到<TOMCAT_HOME>/logs/catalina.out 文件里。

3. JVisualVM

Java VisualVM 是一個(gè)可以提供 JVM 信息的圖形界面工具。它位于 JDK_HOME\bin\jvisualvm.exe 文件里。從 JDK6 Update7 開始,它被包含進(jìn) JDK 里。

運(yùn)行 jvisualvm,在左側(cè)面板中(如下圖所示),列出了運(yùn)行的 JVM 信息,這個(gè)工具可以從本地或者遠(yuǎn)程運(yùn)行的 JVM 里抓取 dump 文件。

點(diǎn)擊上圖的進(jìn)程名稱對(duì)應(yīng)的 Thread Dump 按鈕,將會(huì)生成 dump 文件,如下圖所示:

4. JMC

Java Mission Control (JMC) 是一個(gè)能從本地或生產(chǎn)環(huán)境中收集和分析數(shù)據(jù)的工具,從 Oracle JDK 7 Update 40 開始,它被包含進(jìn) JDK 里,它可以從 JVM 里生成 dump 文件。JMC 位于 JDK_HOME\bin\jmc.exe 文件里:

運(yùn)行該工具之后,你可以看到運(yùn)行在本地的 Java 進(jìn)程,它也可以連接到遠(yuǎn)程機(jī)器。雙擊你想要生成 dump 文件的 Java 進(jìn)程,點(diǎn)擊Flight Recorder,你會(huì)看到以下的對(duì)話框:

在 Thread Dump 下拉框,你可以選擇生成 dump 文件的時(shí)間間隔。在上面的例子里,每隔60秒將會(huì)生成一個(gè) dump 文件。選擇完成之后啟動(dòng) Flight recorder ,可以在 Threads 面板看到 dump 文件的內(nèi)容:

5. Windows (Ctrl + Break)

這種方式僅僅在 Windows 操作系統(tǒng)上有效:

在控制臺(tái)窗口上選中命令行

在命令行窗口上按 “Ctrl + Break” 命令

然后會(huì)生成 dump 文件,dump 文件的內(nèi)容會(huì)被打印在命令行窗口上。

注意1: 有幾款筆記本(比如 Lenovo T 系列)已經(jīng)取消了 “Break” 鍵,在這種情況下你不得不用谷歌搜索與 Break 鍵功能類似的鍵,我發(fā)現(xiàn) “Function key + B” 鍵與 Break 鍵的功能相同,因此我用 “Ctrl + Fn + B” 鍵來生成 dump 文件。

注意2: 用上述方式有一個(gè)缺點(diǎn)就是 dump 文件的內(nèi)容會(huì)被打印到控制臺(tái)上,沒有 dump 文件的話,我們很難用分析工具比如http://fasthread.io來分析 dump 文件。因此你可以使用以下命令將 dump 文件的內(nèi)容輸出到文本文件當(dāng)中,比如你的應(yīng)用程序名字叫 SampleThreadProgram ,那么通常使用的命令如下:

java -classpath . SampleThreadProgram

將 dump 文件的內(nèi)容輸出到文本文件的命令如下:

java -classpath . SampleThreadProgram > C:\workspace\threadDump.txt 2>&1
當(dāng)你按下 “Ctrl + Break” 鍵之后,dump 文件會(huì)被保存到 C:\workspace\threadDump.txt 里。

6. ThreadMXBean

從 JDK 1.5 開始,ThreadMXBean 被引入。這是 JVM 的管理接口,使用這個(gè)接口你僅需要少量的代碼就能生成 dump 文件,以下是使用 ThreadMXBean 生成 dump 文件的主要實(shí)現(xiàn):

public void dumpThreadDump() {
  ThreadMXBean threadMxBean = ManagementFactory.getThreadMXBean();
  for (ThreadInfo ti : threadMxBean.dumpAllThreads(true, true)) {
    System.out.print(ti.toString());
  }
}

7. APM Tool – App Dynamics

一些應(yīng)用性能監(jiān)控工具提供了生成 dump 文件的功能,如果你使用 App Dynamics 監(jiān)控你的應(yīng)用,以下就是生成 dump 文件的步驟:

打開創(chuàng)建動(dòng)作窗口,在創(chuàng)建動(dòng)作窗口中選擇 Diagnostics->Take a thread dump;

輸入動(dòng)作名稱、抓取 dump 文件的數(shù)量、抓取 dump 文件的時(shí)間間隔(毫秒);

如果你想在抓取 dump 動(dòng)作開始之前執(zhí)行一些操作,那么你可以選中 Require approval executing before this Action 這個(gè)復(fù)選框,然后輸入個(gè)人或小組的 email 地址;

點(diǎn)擊 OK.


總結(jié)

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

a. 簡單,容易實(shí)現(xiàn);

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

相關(guān)文章

  • java實(shí)現(xiàn)表格tr拖動(dòng)的實(shí)例(分享)

    java實(shí)現(xiàn)表格tr拖動(dòng)的實(shí)例(分享)

    下面小編就為大家分享一篇java實(shí)現(xiàn)表格tr拖動(dòng)的實(shí)例。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • SpringBoot HttpMessageConverter消息轉(zhuǎn)換器的使用詳解

    SpringBoot HttpMessageConverter消息轉(zhuǎn)換器的使用詳解

    在整個(gè)數(shù)據(jù)流轉(zhuǎn)過程中,前端的請求報(bào)文轉(zhuǎn)化為Java對(duì)象,Java對(duì)象轉(zhuǎn)化為響應(yīng)報(bào)文,這里就用到了消息轉(zhuǎn)換器HttpMessageConverter
    2022-06-06
  • 使用Feign調(diào)用第三方http接口

    使用Feign調(diào)用第三方http接口

    這篇文章主要介紹了使用Feign調(diào)用第三方http接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 老生常談java數(shù)組中的常見異常

    老生常談java數(shù)組中的常見異常

    數(shù)組是用來存儲(chǔ)一系列數(shù)據(jù),但它往往被認(rèn)為是一系列相同類型的變量,異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,接下來讓我們詳細(xì)的了解吧
    2022-03-03
  • Mybatis或Mybatis-Plus框架的xml文件中特殊符號(hào)的使用詳解

    Mybatis或Mybatis-Plus框架的xml文件中特殊符號(hào)的使用詳解

    這篇文章主要介紹了Mybatis或Mybatis-Plus框架的xml文件中特殊符號(hào)的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot詳細(xì)列舉常用注解的說明

    SpringBoot詳細(xì)列舉常用注解的說明

    在開發(fā)SpringBoot程序的過程中,有可能與其他業(yè)務(wù)系統(tǒng)進(jìn)行對(duì)接開發(fā),獲取封裝公共的API接口等等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot常見的注解的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Java AtomicInteger類的使用方法詳解

    Java AtomicInteger類的使用方法詳解

    這篇文章主要介紹了Java AtomicInteger類的使用方法詳解,文中有具體實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • SpringBoot中異常處理實(shí)戰(zhàn)記錄

    SpringBoot中異常處理實(shí)戰(zhàn)記錄

    在我們實(shí)際項(xiàng)目開放中經(jīng)常需要我們處理很多的異常,如何在spring boot項(xiàng)目里面實(shí)現(xiàn)異常處理呢,下面這篇文章主要給大家介紹了關(guān)于SpringBoot中異常處理的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • springboot websocket簡單入門示例

    springboot websocket簡單入門示例

    這篇文章主要介紹了springboot websocket簡單入門示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作

    ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作

    這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論