最近測試環境的Java應用常常掛掉,用jconsole查看堆內存使用狀況,以下圖:web
在達到高峯的時候tomcat服務掛了,看圖能夠知道使用內存過大,因而開始追蹤元兇。數據庫
工具怎麼使用在此不講了,參考官網wiki介紹。 點擊圖中Reports 下的 Leak Suspects,這裏會列出了工具懷疑的內存泄露點,不過工具懷疑的也未必真的是存在的,但提供了一種參考。以下圖:tomcat
圖中懷疑內存泄漏點有四處,點擊圖中第一處的details查看詳細狀況,以下圖:工具
從圖中能夠看到一個ArrayList有240097個對象引用沒有釋放掉,這纔是致使OOM的緣由,再查看報告中的Thread Stack,找到具體代碼所在處,以下圖: 通過排查,原來是程序代碼一次性從數據庫加載了所有的數據,沒有分頁致使的,修改完代碼後一切正常了~~測試