1 确定线上oom对应的配置dump的文件的获取
不管是线上服务器还是本地服务器 出现oom的,首先获取 配置dump文件输出路径 (最快解是和运维沟通配置并找出文件)
2 新手可模拟场景如下
启动idea:模拟配置vm参数 :-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/szy/Desktop/dump/
启动idea模拟代码:
/**
VM Args:
//这两个参数保证了堆中的可分配内存固定为20M
-Xms20m
-Xmx20m
//文件生成的位置,作则生成在桌面的一个目录
-XX:+HeapDumpOnOutOfMemoryError //文件生成的位置,作则生成在桌面的一个目录
//文件生成的位置,作则生成在桌面的一个目录
-XX:HeapDumpPath=/Users/szy/Desktop/dump/
*/
public class HeapOOM {
//创建一个内部类用于创建对象使用
static class OOMObject {
}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject>();
//无限创建对象,在堆中
while (true) {
list.add(new OOMObject());
}
}
}
2 将线上的dump的文件(或本机) 装入本机jdk 下自带的dump文件分析器 visual VM
3 以举例代码为例出现的分析结果是: