我是靠谱客的博主 昏睡舞蹈,最近开发中收集的这篇文章主要介绍java程序OOM分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文主要介绍了 在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分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部