java.lang.OutOfMemoryError 毛病整頓及處理方法。本站提示廣大學習愛好者:(java.lang.OutOfMemoryError 毛病整頓及處理方法)文章只能為提供參考,不一定能成為您想要的結果。以下是java.lang.OutOfMemoryError 毛病整頓及處理方法正文
java.lang.OutOfMemoryError處置毛病
java.lang.OutOfMemoryError異常處理辦法
緣由: 罕見的有以下幾種:
1.內存中加載的數據量過於宏大,如一次從數據庫掏出過量數據;
2.聚集類中有對對象的援用,應用完後未清空,使得JVM不克不及收受接管;
3.代碼中存在逝世輪回或輪回發生過量反復的對象實體;
4.應用的第三方軟件中的BUG;
5.啟動參數內存值設定的太小;
罕見毛病提醒: 1.tomcat:java.lang.OutOfMemoryError: PermGen space
2.tomcat:java.lang.OutOfMemoryError: Java heap space
3.weblogic:Root cause of ServletException java.lang.OutOfMemoryError
4.resin:java.lang.OutOfMemoryError
5.java:java.lang.OutOfMemoryError
處理; 1.運用辦事器提醒毛病的處理: 把啟動參數內存值設置足夠年夜。
2.Java代碼招致毛病的處理: 重點排查以下幾點:
1)檢討代碼中能否有逝世輪回或遞歸挪用。
2)檢討能否有年夜輪回反復發生新對象實體。
3)檢討對數據庫查詢中,能否有一次取得全體數據的查詢。普通來講,假如一次取十萬筆記錄到內存,便可能惹起內存溢出。這個成績比擬隱藏,在上線前,數據庫中數據較少,不輕易出成績,上線後,數據庫中數據多了,一次查詢就有能夠惹起內存溢出。是以關於數據庫查詢盡可能采取分頁的方法查詢。
4 )檢討List、MAP等聚集對象能否有應用完後,未消除的成績。List、MAP等聚集對象會一直存有對對象的援用,使得這些對象不克不及被GC收受接管。
案例: 1.hibernate查詢數據時,一次查詢過量的數據,後來調劑了該部門的代碼,每次只掏出指定量的數據,勝利的處理該成績。 2.在做壓力測試時,湧現OutOfMemoryError,發明session的資本一向沒有被釋放發生的,最好經由過程session的invalidate()辦法將session的資本釋放。 3.法式中湧現逝世輪回。 4.tomcat安排、運轉湧現OutOfMemoryError,加年夜內存參數值,處理此成績。
tomcat中java.lang.OutOfMemoryError: Java heap space異常處置
1、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值。
2、處理辦法:手動設置Heap size 修正TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”下面參加以下行: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
tomcat中java.lang.OutOfMemoryError: PermGen space異常處置
1、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)那末就會發生此毛病信息了。
處理辦法: 手動設置MaxPermSize年夜小 修正TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”下面參加以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 建議:將雷同的第三方jar文件移置到tomcat/shared/lib目次下,如許可以到達削減jar 文檔反復占用內存的目標。
weblogic中java.lang.OutOfMemoryError異常處置
毛病提醒: "Root cause of ervletException java.lang.OutOfMemoryError"
處理方法: 調劑bea/weblogic/common中CommEnv中參數 :sun if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode set JAVA_VM=-client set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none goto continue :sun_prod_mode set JAVA_VM=-server set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m goto continue
Eclipse運轉Jboss時java.lang.OutOfMemoryError:PermGen space異常處置
在Eclipse中運轉Jboss時,時光太長能夠有時刻會湧現java.lang.OutOfMemoryError:PermGen space的毛病,這裡給引見年夜家一種處理辦法:
1)點擊debug圖標旁邊的小箭頭;
2)點擊”Debug Configurations…”菜單項;
3)選右邊的“Generic Server”樹上面的“JBoss v4.2 at localhost”;
4)點擊左邊的“Arguments”Tab頁簽,在“VM arguments”中添加:
-Dprogram.name=run.bat -Djava.endorsed.dirs="D:/JBoss405/bin/../lib/endorsed" -Xms128m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m
5)假如你是以敕令行形式或許直接點擊“run.bat”來運轉JBoss,那你就要在 bin/run.conf 文件中對JVM選項作修正了,找到 JAVA_OPTS="-Xms128m -Xmx512m…” 這一段,然後在前面加上 “ -XX:PermSize=64m -XX:MaxPermSize=256m”。保留就OK了。
6)留意:個中128、512、64和256等數字可以依據本身機械的設置裝備擺設來做一些響應的調劑,然後點擊“Apply”便可以了。
Resin下java.lang.OutOfMemoryError異常處置
緣由: 湧現這個毛病,普通是由於JVM物理內存太小。默許的Java虛擬機最年夜內存僅為64兆,這在開辟調試進程中能夠沒有成績,但在現實的運用情況中是遠遠不克不及知足須要的,除非你的運用異常小,也沒甚麼拜訪量。不然你能夠會發明法式運轉一段時光後包java.lang.OutOfMemoryError的毛病。是以我們須要晉升resin可用的虛擬機內存的年夜小。
處理: 修正/usr/local/resin/bin/httpd.sh中的args選項 添加參數-Xms(初始內存)和-Xmx(最年夜可以或許應用內存年夜小) 可以用來限制JVM的物理內存應用量。 例如: args="-Xms128m -Xmx256m" 設置後,JVM初始物理內存是128m,最年夜能應用物理內存為256m。 這兩個值應當由體系治理員依據辦事器的現實情形停止設置。
感激浏覽,願望能贊助到年夜家,感謝年夜家對本站的支撐!