Java Heap dump文件分析工具jhat簡介


jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成為標配. 使用該命令需要有一定的Java開發經驗,官方不對此工具提供技術支持和客戶服務。

用法:

jhat [ options ] heap-dump-file 

參數:

  • options 可選命令行參數,請參考下面的 Options

  • heap-dump-file 要查看的二進制Java堆轉儲文件(Java binary heap dump file)。 如果某個轉儲文件中包含了多份 heap dumps, 可在文件名之后加上 #<number> 的方式指定解析哪一個 dump, 如: myfile.hprof#3

示例

jmap轉儲可以使用如下方式:

jmap -dump:file=DumpFileName.txt,format=b pid 

例如:

 

C:\Users\Administrator\Desktop>jmap -dump:file=D:/javaDump.hprof,format=b 3614 Dumping heap to D:\javaDump.hprof ... Heap dump file created

 

其中, 3614 是此次啟動Tomcat后,通過tasklist,或任務管理器查看到的 java進程的ID,一般來說, jmap 需要和 java的版本一致或者兼容,才能成功導出. 如果不知道如何使用,直接輸入 jmap, 或者 jmap -h 則可以看到提示信息.

然后分析時使用jhat命令,如下所示:

 

jhat -J-Xmx1024m D:/javaDump.hprof
...... 一堆信息 ...
Snapshot resolved.
Started HTTP server on port 7000 Server is ready.


而 jhat 的 -J 參數是因為默認JVM的堆內存可能不足以加載整個dump 文件. 根據需要進行調整. 根據提示知道端口號是 7000,

 

接着使用瀏覽器訪問 http://localhost:7000/ 即可看到相關信息.

詳細說明

jhat 命令解析Java堆轉儲文件,並啟動一個 web server. 然后用瀏覽器來查看/瀏覽 dump 出來的 heap. jhat 命令支持預先設計的查詢, 比如顯示某個類的所有實例. 還支持 對象查詢語言(OQL, Object Query Language)。 OQL有點類似SQL,專門用來查詢堆轉儲。 OQL相關的幫助信息可以在 jhat 命令所提供的服務器頁面最底部. 如果使用默認端口, 則OQL幫助信息頁面為: http://localhost:7000/oqlhelp/

Java生成堆轉儲的方式有多種:



Options

-stack false|true

 

關閉對象分配調用棧跟蹤(tracking object allocation call stack)。 如果分配位置信息在堆轉儲中不可用. 則必須將此標志設置為 false. 默認值為 true.

-refs false|true

關閉對象引用跟蹤(tracking of references to objects)。 默認值為 true. 默認情況下, 返回的指針是指向其他特定對象的對象,如反向鏈接或輸入引用(referrers or incoming references), 會統計/計算堆中的所有對象。

-port port-number

設置 jhat HTTP server 的端口號. 默認值 7000.

-exclude exclude-file

指定對象查詢時需要排除的數據成員列表文件(a file that lists data members that should be excluded from the reachable objects query)。 例如, 如果文件列列出了 java.lang.String.value , 那么當從某個特定對象 Object o 計算可達的對象列表時, 引用路徑涉及 java.lang.String.value 的都會被排除。

-baseline exclude-file

指定一個基准堆轉儲(baseline heap dump)。 在兩個 heap dumps 中有相同 object ID 的對象會被標記為不是新的(marked as not being new). 其他對象被標記為新的(new). 在比較兩個不同的堆轉儲時很有用.

-debug int

設置 debug 級別. 0 表示不輸出調試信息。 值越大則表示輸出更詳細的 debug 信息.

-version

啟動后只顯示版本信息就退出

-h

顯示幫助信息並退出. 同 -help

-help

顯示幫助信息並退出. 同 -h

-J< flag >

因為 jhat 命令實際上會啟動一個JVM來執行, 通過 -J 可以在啟動JVM時傳入一些啟動參數. 例如, -J-Xmx512m 則指定運行 jhat 的Java虛擬機使用的最大堆內存為 512 MB. 如果需要使用多個JVM啟動參數,則傳入多個 -Jxxxxxx.

另請參閱:

原文鏈接: https://docs.oracle.com/javase/jp/8/technotes/tools/unix/jhat.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM