堆内存溢出怎么排查
内存溢出现象

模拟内存溢出
public class HeadOOM {
static class OOMObject {
}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<>();
while (true){
list.add(new OOMObject());
}
}
}
执行main方法时候需要配置对应的jvm参数

-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath= 改成自己的路径
参数说明:-Xms20m -Xmx20m 设置堆内存最大和最小都是20m
XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。
-XX:HeapDumpPath 指定对应的dump文件路径
获取dump文件
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。它的用途是为了展示java进程的内存映射信息,或者堆内存详情。
可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
jmap -heap:format=b pid bin格式 javaversion 1.5
jmap -dump:format=b,file=filename pid javaversion >1.6
jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里;再配合MAT(内存分析工具(Memory Analysis Tool)或与jhat (Java Heap Analysis
例如
我通过 jdk自带的 jvisualvm 打开了dump 下来的 java_pid10510.hprof 文件


本文介绍了一种模拟Java堆内存溢出的方法,并提供了详细的JVM参数配置指导。通过实例演示了如何利用jmap等工具获取内存快照,进一步分析内存溢出原因。
9875

被折叠的 条评论
为什么被折叠?



