java内存异常自动dump

如何自动dump资源

我们可以让JAVA应用在OOM时dump一份内存快照,事后我们只要分析这个内存快照,一下就可以知道是哪些可恶的对象占用了所有的内存,并且还无法释放。此时你就需要在JVM的启动参数中加入如下的一些参数:

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/agents/java-dump/

第一个参数意思是在OOM的时候自动dump内存快照出来,第二个参数是说把内存快照放到哪儿去,只要你加入了这两个参数,在JVM OOM崩溃的时候,无论你是立马主动收到一个报警,还是被动让客服通知了你,立马就可以去找OOM时候的内存快照了。

JVM的启动参数中加入如下的一些参数

在test环境中增加:

'-XX:OnOutOfMemoryError=/opt/agents/sre-sh/file_rename.sh /opt/agents/java-dump/xxxx.hprof',
'-XX:+HeapDumpOnOutOfMemoryError', '-XX:HeapDumpPath=/opt/agents/java-dump/xxxxx.hprof',

如何手动dump资源:

1、进入pod的终端界面执行以下任意命令:

jmap -dump:live,file=/opt/agents/java-dump/xxx.dump 1
jmap -dump:format=b,file=/opt/agents/java-dump/xxx.dump 1

原文地址:https://www.cnblogs.com/wudongyu/p/15009329.html