Java程序在運行的時候,因爲一些代碼問題,可能會出現OOM錯誤,那此時如何排查呢?可以分爲幾步
第一步,就是找到Tomcat對應的一個進程號,可以使用ps-ef來找到對應的PID
第二步,就是可以使用jmap-heap指令,跟上剛纔查到的PID,來查看JVM堆內存的使用情況,主要是看survivor區和老年代的空間,如果survivor區和老年代一直是比較滿的狀態,可能就會有問題
第三步,使用jmap指令,可以直接在控制檯生成java對象的情況,包括像對象個數,佔用內存大小都可以看到,或者加上dump參數,直接生成dump文件,然後放到jprofiler中就可以很直觀地看到對象的內存佔用情況,可以分析出哪個對象是可能存在內存泄漏問題,然後直接去代碼中優化了。