日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java dumpheap_java程序性能分析之thread dump和heap dump

發(fā)布時間:2024/8/23 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java dumpheap_java程序性能分析之thread dump和heap dump 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.dump基本概念

在故障定位(尤其是out of memory)和性能分析的時候,經(jīng)常會用到一些文件來幫助我們排除代碼問題。這些文件記錄了JVM運行期間的內(nèi)存占用、線程執(zhí)行等情況,這就是我們常說的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我們可以這么理解:heap dump記錄內(nèi)存信息的,thread dump是記錄CPU信息的。

heap dump:

heap dump文件是一個二進制文件,它保存了某一時刻JVM堆中對象使用情況。HeapDump文件是指定時刻的Java堆棧的快照,是一種鏡像文件。Heap Analyzer工具通過分析HeapDump文件,哪些對象占用了太多的堆棧空間,來發(fā)現(xiàn)導(dǎo)致內(nèi)存泄露或者可能引起內(nèi)存泄露的對象。

thread dump:

thread dump文件主要保存的是java應(yīng)用中各線程在某一時刻的運行的位置,即執(zhí)行到哪一個類的哪一個方法哪一個行上。thread dump是一個文本文件,打開后可以看到每一個線程的執(zhí)行棧,以stacktrace的方式顯示。通過對thread dump的分析可以得到應(yīng)用是否“卡”在某一點上,即在某一點運行的時間太長,如數(shù)據(jù)庫查詢,長期得不到響應(yīng),最終導(dǎo)致系統(tǒng)崩潰。單個的thread dump文件一般來說是沒有什么用處的,因為它只是記錄了某一個絕對時間點的情況。比較有用的是,線程在一個時間段內(nèi)的執(zhí)行情況。

兩個thread dump文件在分析時特別有效,困為它可以看出在先后兩個時間點上,線程執(zhí)行的位置,如果發(fā)現(xiàn)先后兩組數(shù)據(jù)中同一線程都執(zhí)行在同一位置,則說明此處可能有問題,因為程序運行是極快的,如果兩次均在某一點上,說明這一點的耗時是很大的。通過對這兩個文件進行分析,查出原因,進而解決問題。

二.利用JDK自帶的工具獲取thread dump文件和heap dump文件

使用的JDK工具在JDK_HOME/bin/目錄下,使用到j(luò)map和jstack這兩個命令。

1.獲取heap dump文件

windows下切換到JDK_HOME/bin/,執(zhí)行以下命令:jmap -dump:format=b,file=heap.hprof 2576

linux下切換到JDK_HOME/bin/,執(zhí)行以下命令:./jmap -dump:format=b,file=heap.hprof 2576

這樣就會在當(dāng)前目錄下生成heap.hprof文件,這就是heap dump文件。

2.獲取thread dump文件

windows下執(zhí)行:jstack 2576 > thread.txt

linux下執(zhí)行:./jstack 2576 > thread.txt

windows/linux則會將命令執(zhí)行結(jié)果轉(zhuǎn)儲到thread.txt,這就是thread dump文件。有了dump文件后,我們就能借助性能分析工具獲取dump文件中的信息。

3.如果我們只需要將dump中存活的對象導(dǎo)出,那么可以使用:live參數(shù)

jmap -dump:live,format=b,file=heapLive.hprof 2576

執(zhí)行完后,我們在當(dāng)前目錄C:\Java\jdk1.6.0_27\bin下看到剛生成的三個文件,如下所示:

說明:如上實例的2576是我當(dāng)前需要分析的java進程PID,關(guān)于Windows下如何獲得指定的JAVA時空程PID可參考:http://bijian1013.iteye.com/blog/2221238

三.使用工具分析java heap dump文件

現(xiàn)在我們使用一些圖形化工具,來幫助我們分析文件中的信息,有效地定位問題。

1.使用JDK自帶的jhat命令

jhat是用來分析java堆的命令,可以將堆中的對象以html的形式顯示出來,包括對象的數(shù)量,大小等等,并支持對象查詢語言。

jhat -port 5000 heap.hrof

當(dāng)服務(wù)啟動完成后,我們就可以在瀏覽器中,通過http://localhost:5000/進行訪問,如下所示:

2.使用eclipse MAT工具

一般來說,應(yīng)用程序的dump文件都是很大的,jdk自帶命令難以分析這些大文件。在實際的生產(chǎn)環(huán)境下,我們必須要借助第三方工具,才能快速打開這些大文件,進行分析定位。eclipse memory analyzer是一款優(yōu)秀的heap分析工具,能夠幫我們快速定位內(nèi)存泄露問題。

總結(jié)

以上是生活随笔為你收集整理的java dumpheap_java程序性能分析之thread dump和heap dump的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。