使用 jdk 自帶的 jhat 命令
如何打印堆棧信息到hprof文件中
運行程序增加VM參數(如何增加VM執行參數,可以查看之前文章):
-XX:+HeapDumpOnOutOfMemoryError # 會打印出現內存溢出異常時,Dump出當前內存堆轉存快找以便分析
步驟1:
在命令行界面,執行以下命令,其中java_pid73912.hprof為文件名稱
jhat java_pid73912.hprof
會輸出
Reading from java_pid73912.hprof...
Dump file created Thu Apr 08 22:18:08 CST 2021
Snapshot read, resolving...
Resolving 818890 objects...
Chasing references, expect 163 dots...................................................................................................................................................................
Eliminating duplicate references...................................................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
當看出Server is ready.
之后,可以通過 ip + port 地址瀏覽器訪問,我這里是本地,所以是 localhost:7000
點擊Show instance counts for all classes (including platform)
會展示包含平台的類的的信息
點擊Show instance counts for all classes (excluding platform)
會展示不包含平台的所有類的信息
可以看到我這里占用空間最多的類是 class com.geniu.book.deepinJVM.chapter2.TestHeapOOM$OOMObject
有 80 多萬個實例。
其他建議方案:
1)使用idea插件 JProfiler
2)minidump_stackwalk 工具,可以讀取 dump 文件