java 生成hprof文件方式以及分析工具

在分析内存溢出、内存泄漏等内存问题时,Heap dump是关键。那么有哪些方法可以生成Heeap dump呢?

HeapDumpOnOutOfMemoryError

这是最关键的一种,在所有生产环境上运行java应用,一定要加上这个flag。因为谁也不能保证这次上的版本么有内存问题,等到程序崩掉的时候,发现没有保留堆内存快照,那么就是没有保留案发现场,浪费了最好的分析问题的场景。

使用示例:

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/tmp/heapdump.hprof -jar MyApp.jar

jcmd

jcmd是java 8引入的集大成的诊断工具。大家都应该尽量熟悉这个工具。

# 使用方式:

jcmd GC.heap_dump

# 示例:

jcmd 3873 GC.heap_dump /data/tmp/heapdump.hprof

jmap

jmap是传统的,也应该是当前大家最熟悉的生成堆快照的方法:

# 使用方法:

jmap -dump:format=b,file=

# 示例:

jmap -dump:live,format=b,file=/data/tmp/heapdump.hprof 3873

其中live的意思是只保留存活的对象。否则所有对象(包括已经被gc的对象)都会被输出,这在线上环境heap比较大,运行时间比较长的情况线下,会导致heap过大,没有必要。
原文:java 生成hprof_Java应用问题定位系列——4种常见生成Heap Dump(堆快照)的方法_zhengjw666的博客-CSDN博客https://blog.csdn.net/weixin_35869628/article/details/114110755

打开hprof文件
jvisualvm:
jvisualvm分析hprof文件_keep_learn的专栏-CSDN博客_jvisualvm分析hprofhttps://blog.csdn.net/keep_learn/article/details/106876610JProfiler:
【知识积累】使用JProfiler分析dump文件_Darren的博客-CSDN博客_jprofiler分析dump文件icon-default.png?t=LA92https://blog.csdn.net/axin1240101543/article/details/105142141/

 

你可能感兴趣的:(java,java,jvm)