内存溢出问题排查

启动命令

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的内存,至此问题定位完成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容