最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java中内存溢出异常的分析
时间:2022-11-14 23:25:43 编辑:袖梨 来源:一聚教程网
首先使用jdk自带的工具jmap转储(dump)java内存堆数据到本地文件中。jmap转储(dump)命令格式如下:
jmap -dump:
dump-options可以有以下三种参数,参数之间用逗号隔开:
live,只dump活动的object,如果没有指定,表示dump所有object
format=b,字节流格式
file=,是转储文件的保存路径
下面是dump命令的一个例子:
jmap -dump:format=b,file=heap.bin 8023
dump完成后,用Eclips教程e Memory Analyzer打开转储文件进行分析。Eclipse Memory Analyzer是一个java内存堆转储文件分析工具,可以生成内存分析报告(包括内存泄露Leak Suspects )。下面是分析完成后查看Top Consumers所看到的图表:
看到这两张图表,问题就比较明朗了。berkeley db中的数据结点com.sleepycat.je.tree.BIN占用了大量内存,导致内存溢出了。为了提高访问效率,berkeley db会缓存大量的结点,缓存大小限制可以在EnvironmentConfig设置,默认为jvm内存大小限制的60%。而这个应用程序中使用了5个EnvironmentImpl,并且都未单独设置缓存大小,总的缓存限制为jvm内存限制的300%(图表中BIN结点已经占用了94.55%的内存),远远超出java的内存限制。随着服务的运行,缓存数据越来越多,最后导致内存溢出错误。因此,为每个EnvironmentImpl设置合适的缓存大小限制,就可以避免再次发生内存溢出。
相关文章
- 《潜行者2:切尔诺贝利之心》借刀杀人成就攻略分享 11-21
- 《潜行者2:切尔诺贝利之心》游戏保存方法介绍 11-21
- 《潜行者2:切尔诺贝利之心》游戏支线任务作用介绍 11-21
- 《潜行者2:切尔诺贝利之心》异常现象特点介绍 11-21
- 《潜行者2:切尔诺贝利之心》随机事件避免原因介绍 11-21
- 《潜行者2:切尔诺贝利之心》随机事件应对方法推荐 11-21