斷點

          每天進(jìn)步一點點!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          java.lang.OutOfMemoryError: PermGen space

          Posted on 2010-05-30 15:34 斷點 閱讀(659) 評論(0)  編輯  收藏 所屬分類: WebLogic

          weblogic在運行一段時間后,出現(xiàn)以下的錯誤:
          <2010-5-28 上午11時46分17秒 CST> <Error> <HTTP> <BEA-101017> <[weblogic.servlet.internal.WebAppServletContext@
          1b0d235 - appName: 'rules', name: 'rules', context-path: '/rules'] Root cause of ServletException.
          java.lang.OutOfMemoryError: PermGen space
          >


          解決方法:
          重新啟動weblogic,系統(tǒng)恢復(fù)正常。


          這里以tomcat環(huán)境為例,其它WEB服務(wù)器如jboss,weblogic等是同一個道理。

           一、java.lang.OutOfMemoryError: PermGen space PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域, 這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGen space中, 它和存放類實例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運行期對 PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很多CLASS的話,就很可能出現(xiàn)PermGen space錯誤, 這種錯誤常見在web服務(wù)器對JSP進(jìn)行pre compile的時候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過了jvm默認(rèn)的大小(4M)那么就會產(chǎn)生此錯誤信息了。

           解決方法: 手動設(shè)置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m

           建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少jar 文檔重復(fù)占用內(nèi)存的目的。


           二、java.lang.OutOfMemoryError: Java heap space Heap size 設(shè)置 JVM堆的設(shè)置是指java程序運行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動的時候會自動設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4??梢岳肑VM提供的-Xmn -Xms -Xmx等選項可進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。提示:在JVM中如果98%的時間是用于GC且可用的Heap size 不足2%的時候?qū)伋龃水惓P畔?。提示:Heap Size 最大不要超過可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項設(shè)置為相同,而-Xmn為1/4的-Xmx值。

           解決方法:手動設(shè)置Heap size 修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"


           三、實例,以下給出1G內(nèi)存環(huán)境下java jvm 的參數(shù)設(shè)置參考:
          JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "


           四、 可以配置下Tomcat。
          修改TOMCAT_HOME/bin/tomcat6w.exe 雙擊打開,在“Java "下設(shè)置如下:
          Initial memory pool:768 MB
          Maximum memory pool:1024 MB
          Thread stack size:64KB


          Java 堆 - 這是 JVM 用來分配 java 對象的內(nèi)存。
          如果JVM不能在java堆中獲得更多內(nèi)存來分配更多java對象,將會拋出java內(nèi)存不足(java.lang.OutOfMemoryError)錯誤。默認(rèn)情況下,應(yīng)用程序崩潰。
          本地內(nèi)存 - 這是 JVM 用于其內(nèi)部操作的內(nèi)存。
          如果 JVM 無法獲得更多本地內(nèi)存,它將拋出本地內(nèi)存不足(本地 OutOfMemoryError)錯誤。當(dāng)進(jìn)程到達(dá)操作系統(tǒng)的進(jìn)程大小限值,或者當(dāng)計算機用完 RAM 和交換空間時,通常會發(fā)生這種情況。
          進(jìn)程大小 - 進(jìn)程大小將是 java 堆、本地內(nèi)存與加載的可執(zhí)行文件和庫所占用內(nèi)存的總和。在 32 位操作系統(tǒng)上,進(jìn)程的虛擬地址空間最大可達(dá)到 4 GB。從這 4 GB 內(nèi)存中,操作系統(tǒng)內(nèi)核為自己保留一部分內(nèi)存(通常為 1 - 2 GB)。剩余內(nèi)存可用于應(yīng)用程序。

          主站蜘蛛池模板: 淄博市| 宁乡县| 峡江县| 泰来县| 永丰县| 巴中市| 乌苏市| 酒泉市| 天津市| 门头沟区| 桃园县| 小金县| 舞钢市| 米泉市| 三门峡市| 应用必备| 延川县| 阿拉善盟| 舞钢市| 丘北县| 祁连县| 尚义县| 东辽县| 衡东县| 舞钢市| 新乡市| 缙云县| 东乡县| 嵊州市| 衡东县| 长汀县| 大田县| 巴彦县| 吕梁市| 岢岚县| 灌阳县| 绍兴市| 梁河县| 安义县| 大厂| 菏泽市|