線上故障排查(2) - Java應用故障之堆溢出OOM問題及排查方案


 

以下是用於測試OOM的測試代碼:

這段代碼非常簡單,其目的就是為了模擬OOM,將其編譯后,通過以下命令運行:

java -Xmx10m -Xms10m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./oom.out HeapMemUseTest
其中的參數代表的意義為:

-Xmx和-Xms分別是用於指定該Java進程初使化的最小堆內存以及可以使用的最大堆內存的,這里設置為10M

-XX:+HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath參數分別用於指定發生OOM是否要導出堆以及導出堆的文件路徑

該命令一執行,立即就會發生OOM,並打印如下的日志:


查看當前路徑,oom.out文件已經生成了,該文件就是應用在發生OOM異常時自動導出的堆文件。那我們此時需要對該文件進行分析,因為其中記錄了是什么對象導出了應用程OOM的發生。

分析OOM的工具推薦使用MAT,下載地址為https://projects.eclipse.org/projects/tools.mat,在配置好Java環境的電腦中,直接打開即可,不需要安裝,然后通過MAT打開已經生成的OOM文件oom.out,出現如下提示,選擇“Leak Suspects Report”執行內存泄漏檢查分析:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM