有一个我们公司整合第三方的系统(主要是数据同步用的),每当系统操作了一段时间后就会报内存溢出!!!
oom检查了一下我们自己的代码,一直没发现问题,(一开始还以为是因为查询记录过大或者包含大字段的原因,一下子保存到内存中过大导致的)于是乎就想起了一些JVM监控工具,这里安利一波yourkit!!!
通过监控资源和调用栈,终于发现了是因为prepareStatement没有正确关闭造成的!!!
yourkit界面 yourkit界面 异常日志最终发现代码里的一个隐藏坑!
代码大致是这样的for循环里的ps并不是每一个都被关闭了!只有最后一个引用的对象才被关闭!
网友评论