启动命令
nohup java -Xms100m -Xmx200m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/dump -jar xxx.jar > /usr/error.log &
## 说明
-Xms100m: 设置初始化堆内存大小100m
-Xmx200m:设置最大可分配堆内存大小200m
-XX:+HeapDumpOnOutOfMemoryError:在内存溢出的时候就会生成Heap dump文件
模拟代码
@RequestMapping("/outOfMemory")
public String outOfMemory() {
Thread thread = new Thread(() -> {
int i = 1;
while (true) {
Student student = new Student();
student.setStuNo(String.valueOf(i));
student.setStuName(i + "号学生");
studentList.add(student);
System.out.println("已添加" + i + "名学生");
i++;
}
});
thread.start();
return "success";
}
执行结果
image.png可以看到dump文件已经生成
解析dump文件
直接使用idea打开dump文件
image.png可以看到OutOfMemoryController下的studentList占用了190M的内存,至此问题定位完成
网友评论