JVM OOM文件储存方案
OOM-kill就是out-of-memory,在linux内核中有一层保护机制,用于避免linux在内存不足的时候不至于严重的问题,把无关紧要的进程杀掉。
然而,有的时候我们的应用程序被OOM killer杀掉之后我们需要进行问题的排查。我们可以通过分析dump日志来定位分析OOM异常。
怎么抓取Dump文件?
通过设置JVM参数实现。
相关参数
-XX:+HeapDumpOnOutOfMemoryError
设置当首次遭遇内存溢出时导出此时堆中相关信息。
-XX:HeapDumpPath
指定导出堆信息时的路径或文件名,比如:
-XX:HeapDumpPath=/tmp/heapdump.hprof
具体使用
- 通过Java命令启动时设置 Jvm 参数:
java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions \
-XX:+UseCGroupMemoryLimitForHeap \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/tmp/heapdump.hprof -jar app.jar
- 如果使用容器部署Java应用:
docker run \
-e JAVA_OPTS="... -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof..." \
......
- 另外,还要规定好容器平台从容器中采集
/tmp/heapdump.hprof
文件。