java OutOfMemberError:PermGen space問題解決

轉載自:https://blog.csdn.net/github_38924695/article/details/78911968

項目運行時經常出現OutOfMemberError:PermGen space問題,通常是在本地tomcat中的bin中的catalina.bat文件最上面添加以下配置: 
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m 
以上參數的解釋如下: 
-Xms:堆的最小值 
-Xmx:堆的最大值 設置這兩個參數一樣可以避免堆自動擴展 
-XX:+HeapDumpOnOutOfMemoryError 可以讓虛擬機在出現內存溢出異常時跳出當前內存堆轉觸快照 
-XX:permSize -XX:MaxPermSize 限制方法區的大小 
-XX:MaxDirectMemorySize 指定本機直接內存大小,如果不指定默認與java堆最大值(-Xmx)相同 
除過配置當出現OOM時要注意代碼優化,檢查代碼。 
代碼產生OutOfMemberError時重點檢查以下代碼: 
1.檢查代碼中是否有死循環或遞歸調用。 
2.檢查是否有大循環重複產生新對象實體。 
3.檢查對數據庫查詢中,是否有一次獲得全部數據的查詢。一般來說,如果一次取十萬條記錄到內存,就可能引起內存溢出。這個問題比較隱蔽,在上線前,數據庫中數據較少,不容易出問題,上線後,數據庫中數據多了,一次查詢就有可能引起內存溢出。因此對於數據庫查詢儘量採用分頁的方式查詢。 
4.檢查List、MAP等集合對象是否有使用完後,未清除的問題。List、MAP等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收。 
設置好之後,使用netstat -ao查看pid,然後通過jmap -heap pid查看設置是否成功 

è¿éåå¾çæè¿°

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章