项目出现heap space的分析处理记录
后台频繁出现heap space。将tomcat中-Xmx设置成了2G。但是过了几天仍然报了heap space错误。
既然增大jvm内存也无法避免频繁溢出,那么肯定是某处代码写的有问题,因此要排查一下。
首先在tomcat的catalina.sh中给JAVA_OPTIONS新增了参数-XX:+HeapDumpOnOutOfMemoryError。这样当堆溢出的时候,会转存dump文件到bin目录下。
果然重启后没多久又报heap space了。从bin目录下拿到.hprof的dump文件,然后用MemoryAnalyzer工具打开进行分析。
该工具一些常用的分析栏可以参考以下博客
https://blog.csdn.net/billxin0621/article/details/121857126
工具解析dump后,说一下排查大致思路。
1.先分析饼状图,观察是哪几个对象导致了溢出
2.分析histogram,看一下jvm中有哪些对象特别多
3.查看Leak suspect。这个分析页面会告诉你最有可能导致内存溢出的代码位置。
根据以上三个分析页面,首先根据1和3去排查对应的代码位置,揣摩是否存在垃圾无法回收的问题,是否存在大数据量加载的问题,是否存在死循环的问题等等。然后结合histogram中对象的数量就可以大致的知道是哪段代码导致的对象数量暴增。最后分析代码是否存在问题即可。