内存溢出在开发中或者线上出现的概率很高,造成的直接结果是系统运行缓慢,或者直接宕机。
在这里模拟下内存溢出的情况以防患于线上出现内存溢出要如何排查问题,线上出问题需要生成一个快照(hprof文件),在本地查看问题。
其他工具调试如阿里的Arthas、MAT、jvisualvm、JProfiler。
1,准备一个可以出现内存溢出的代码:
public class TestOOM {
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
while(true){
list.add(new Object());
}
}
}
2,在IDEA中配置VM参数【-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\jvmtest】
说明:
-Xms 为jvm启动时分配的内存,比如-Xms2m,表示分配2M。
-Xmx 为jvm运行过程中分配的最大内存,比如-Xmx4m,表示jvm进程最多只能够占用4M内存。
-XX:+HeapDumpOnOutOfMemoryError 表示出现OutOfMemoryError异常时,记录快照。
-XX:HeapDumpPath 表示快照的存储位置(这里可以设置文件名字,也可以不设置),不设置名字它会自己生成的。
执行后,会抛出如下异常
3,使用jvisualvm查看内存快照,使用jvisualvm