工具
1、VisualVM
背景
某应用 长时间运行后 崩溃,查看日志发现 heap out of memory错误,遂加大jvm的设置内存到1GB。
更长时间运行后依然崩溃,遂使用jdk自带的VisualVM查看应用内存使用情况
过程
使用VisualVM查看内存使用情况后发现,内存使用率稳步上升,直到接近1GB后不久遍崩溃。
分析内存dump后,发现String Char类型变量占用了90%以上的内存。
经过网络查询后发现VisualVM分析内存溢出的功能并不强大,改用MAT来分析dump文件
分析发现大量的String和Char实际属于为某对象。该对象数量达到 千万,亿级别。
在代码中查找此对象,并定位错误原因。
参考文章
使用Memory Analyzer tool(MAT)分析内存泄漏(二)
通过分析Heap Dump 来了解 Memory Leak ,Retained Heap,Shallow Heap