一、方式一:JVM启动时增加两个参数:
1、出现 OOME 时生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError
2、生成堆文件地址:-XX:HeapDumpPath=/opt/logs/myService/HeapDumpOnOutOfMemoryError/
java -Xms2048m -Xmx2048m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/logs/myService/HeapDumpOnOutOfMemoryError/
-jar myService.jar
二、方式二:手工执行,立即生成成当前JVM的dmp文件,1234是指Java程序的PID
1、获取Java程序的PID
[root@k8s ~]# ps -ef|grep myService
root 1234 3542583 0 09:40 pts/2 00:00:23 java -jar myService.jar
2、通过PID,dump出分析日志hprof
jmap -dump:format=b,file=dumplog.hprof 1234
3、下载下来的dumplog.hprof可以使用eclipse的MemoryAnalyzer进行JVM堆栈分析
OOM分析工具-MemoryAnalyzer.zip-互联网文档类资源-CSDN下载https://download.csdn.net/download/asd051377305/75401507
三、总结(推荐用第一种,-XX的方式)
- 第一种方式是一种后置动作,只有等当前JVM出现问题后才会触发生成dmp文件
- 第二种方式可以立刻手工生成,但在执行时,JVM是暂停服务的,所以对线上的运行会产生影响。因此建议第一种方式(服务启动追加-XX )。