jvm內存溢出處理辦法(jvm內存溢出怎樣處理)。本站提示廣大學習愛好者:(jvm內存溢出處理辦法(jvm內存溢出怎樣處理))文章只能為提供參考,不一定能成為您想要的結果。以下是jvm內存溢出處理辦法(jvm內存溢出怎樣處理)正文
java.lang.OutOfMemoryError: PermGen space
發明許多人把成績歸因於: spring,hibernate,tomcat,由於他們靜態發生類,招致JVM中的permanent heap溢出 。然後處理辦法眾口紛纭,有人說進級 tomcat版本到最新乃至爽性不消tomcat。還有人疑惑spring的成績,在spring服裝論壇t.vhao.net上評論辯論很劇烈,由於spring在AOP時應用CBLIB會靜態發生許多類。
但成績是為何這些王牌的開源會湧現統一個成績呢,那末是否是更基本的緣由呢?tomcat在Q&A很隱晦的答復了這一點,我們曉得這個成績,但這個成績是由一個更基本的成績發生。
因而有人對更基本的JVM做了檢討,發明了成績的症結。本來SUN 的JVM把內存分了分歧的區,個中一個就是permenter區用來寄存用得異常多的類和類描寫。原來SUN設計的時刻以為這個區域在JVM啟動的時刻就 固定了,但他沒有想到如今靜態會用得這麼普遍。並且這個區域有特別的渣滓發出機制,如今的成績是靜態加載類到這個區域後,gc基本沒方法收受接管!
1、起首是:java.lang.OutOfMemoryError: Java heap space
說明:
Heap size 設置
JVM堆的設置是指java法式運轉進程中JVM可以分配應用的內存空間的設置.JVM在啟動的時刻會主動設置Heap size的值,其初始空間(即-Xms)是物理內存的1/64,最年夜空間(-Xmx)是物理內存的1/4。可以應用JVM供給的-Xmn -Xms -Xmx等選項可停止設置。Heap size 的年夜小是Young Generation 和Tenured Generaion 之和。
提醒:在JVM中假如98%的時光是用於GC且可用的Heap size 缺乏2%的時刻將拋出此異常信息。
提醒:Heap Size 最年夜不要跨越可用物理內存的80%,普通的要將-Xms和-Xmx選項設置為雷同,而-Xmn為1/4的-Xmx值。
處理辦法:
手動設置Heap size
修正TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”下面參加以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m
或修正catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”下面參加以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
[html]
2、其次是:java.lang.OutOfMemoryError: PermGen space
緣由:
PermGen space的全稱是Permanent Generation space,是指內存的永遠保留區域,這塊內存重要是被JVM寄存Class和Meta信息的,Class在被Loader時就會被放到PermGen space中,它和寄存類實例(Instance)的Heap區域分歧,GC(Garbage Collection)不會在主法式運轉期對PermGen space停止清算,所以假如你的運用中有很CLASS的話,就極可能湧現PermGen space毛病,這類毛病罕見在web辦事器對JSP停止pre compile的時刻。假如你的WEB APP下都用了年夜量的第三方jar, 其年夜小跨越了jvm默許的年夜小(4M)那末就會發生此毛病信息了。
處理辦法:
1. 手動設置MaxPermSize年夜小
修正TOMCAT_HOME/bin/catalina.bat(Linux下為catalina.sh),在
[code]
“echo "Using CATALINA_BASE: $CATALINA_BASE"”下面參加以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
catalina.sh下為:
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"