通常來說,分析堆內存快照(Heap Dump)是一個很好的定位手段 ,開啟了dump的參數:
-XX:+HeapDumpOnOutOfMemoryError
有了這個參數,當我們不得不面對內存溢出異常的時候會節約大量的時間。默認情況下,堆內存快照會保存在JVM的啟動目錄下名為java_pid<pid>.hprof 的文件里(在這里<pid>就是JVM進程的進程號)
dump的內容有2G,先進行壓縮打包,傳輸至本地(scp)
tar -czvf dump.tar java_pid4824.hprof
tar -xzvf dump.tar
使用Jprofile打開dump文件


發現導致內存溢出的是幾個PreparedStateMent,查看其內容,發現時插入業務日志的sql

最終發現是代碼for循環層級關系錯亂導致的.

