概述
本文主要介绍了 在java程序出现了OOM的时候,我们可以怎么办来追踪问题。
1.模拟一下内存溢出:
-
使用main方法测试,写一个一直创建新对象的方法,往list中添加;
Integer size = 2048*10;
List<byte[]> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
System.out.println(i);
TimeUnit.MILLISECONDS.sleep(10);
list.add(new byte[size]);
}
-
cmd打开jvisualvm,打开类,观察堆空间的曲线动态图;
-
dump堆 数据出来,生成一个heapdump-pid.phrof 的文件,使用jvisualvm打开观察数据,可以看到类数量统计,哪一个数据占用的空间最多,存在多少对象;
这里点击堆dump可以下载
观察到这里堆内存中数据量最大的数据
-
生产环境自动dump出oom信息的phrof文件,使用启动参数 -XX:+HeapDumpOnOutOfMemoryError ,导出地址:-XX:+HeapDumpPath=
可以看到,在我们发生了oom后,jvm直接自动给我们dump了一个文件
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid17372.hprof ...
Heap dump file created [63917844 bytes in 0.043 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at com.example.spring20200217test.SomethingTest.main(SomethingTest.java:68)
-
使用mat(MemoryAnalyzer)工具进行分析,该工具基于eclipse,直接跟jvisualvm类似操作。
2.实际使用案例:https://blog.csdn.net/liu765023051/article/details/75127361
附录:更新链接文章:
-
Memory Analyzer基本使用
最后
以上就是昏睡舞蹈为你收集整理的java程序OOM分析的全部内容,希望文章能够帮你解决java程序OOM分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复