OutOfMemoryError: GC Overhead Limit Exceeded错误处理
OutOfMemoryError: GC Overhead Limit Exceeded錯誤處理
最近線上遇到一個問題,服務日志正常打印,但是接口調不通,重啟服務后正常。
為了找到問題所在,那就翻日志,究竟是哪里出現異常,結果發現 OutOfMemoryError: GC Overhead Limit Exceeded 錯誤。
初步判斷有內存溢出。但是沒有dump日志,不好分析。所以在啟動腳本中加上了:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/psm/psm/logs/gc/? ,將OutOfMemoryError 的dump日志打印保存,
一段時間之后又遇到這種問題?,F在有dump文件可以看了。服務器相應目錄里有這種文件名:java_pid6705.hprof,download下來用jdk自帶的jvisualvm.exe打開,在java的bin目錄里能找到這個工具。
如圖:
點擊錯誤線程到相應的錯誤位置
按描述基本可以看出問題所在。
結合日志查詢可得出結論:
結果是:有人查詢數據的時候沒有限制分頁,直接把pagesize放到最大,查詢出來的數據太多,導致內存超出了限制。
解決方法:限制分頁數,設置默認值
其他情況解決方案,網上也有很多如:
? ? ? ? ? ?增加堆大小,啟動腳本添加參數-Xmx1024m
? ? ? ? ? ?關閉GC Overhead limit:-XX:-UseGCOverheadLimit?(都建議不推薦此方法,個人也不推薦,有可能會引發其他問題如java.lang.OutOfMemoryError: Java heap space錯誤)
?
?
總結
以上是生活随笔為你收集整理的OutOfMemoryError: GC Overhead Limit Exceeded错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux/centos环境下maven
- 下一篇: springboot结果集空值处理