最近测试环境的Java应用常常挂掉,用jconsole查看堆内存使用状况,以下图:web
在达到高峰的时候tomcat服务挂了,看图能够知道使用内存过大,因而开始追踪元凶。数据库
工具怎么使用在此不讲了,参考官网wiki介绍。 点击图中Reports 下的 Leak Suspects,这里会列出了工具怀疑的内存泄露点,不过工具怀疑的也未必真的是存在的,但提供了一种参考。以下图:tomcat
图中怀疑内存泄漏点有四处,点击图中第一处的details查看详细状况,以下图:工具
从图中能够看到一个ArrayList有240097个对象引用没有释放掉,这才是致使OOM的缘由,再查看报告中的Thread Stack,找到具体代码所在处,以下图: 通过排查,原来是程序代码一次性从数据库加载了所有的数据,没有分页致使的,修改完代码后一切正常了~~测试