记一次内存溢出处理

有一个我们公司整合第三方的系统(主要是数据同步用的),每当系统操作了一段时间后就会报内存溢出!!!

记一次内存溢出处理_第1张图片
oom

检查了一下我们自己的代码,一直没发现问题,(一开始还以为是因为查询记录过大或者包含大字段的原因,一下子保存到内存中过大导致的)于是乎就想起了一些JVM监控工具,这里安利一波yourkit!!!

通过监控资源和调用栈,终于发现了是因为prepareStatement没有正确关闭造成的!!!

记一次内存溢出处理_第2张图片
yourkit界面


记一次内存溢出处理_第3张图片
yourkit界面


记一次内存溢出处理_第4张图片
异常日志

最终发现代码里的一个隐藏坑!


记一次内存溢出处理_第5张图片
代码大致是这样的

for循环里的ps并不是每一个都被关闭了!只有最后一个引用的对象才被关闭!

你可能感兴趣的:(记一次内存溢出处理)