如何自动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',
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