Tomcat出現(xiàn)_PermGen_space解決方案_第1頁
Tomcat出現(xiàn)_PermGen_space解決方案_第2頁
Tomcat出現(xiàn)_PermGen_space解決方案_第3頁
Tomcat出現(xiàn)_PermGen_space解決方案_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Tomcat 出現(xiàn) PermGen space 解決方案PermGen space 的全稱是 Permanent Generation space, 是指內(nèi)存的永久保存區(qū)域,這塊內(nèi) 存主要是被 JVM存放 Class和Meta信息的,Class 在被Loader時就會被放到 PermGen space 中,它和存放類實例(Instanee)的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運(yùn)行期對PermGenspace進(jìn)行清理,所以如果你的應(yīng)用中有很CLASS勺話,就很可能出現(xiàn)PermGenspace錯誤,這種錯誤常見在 web服務(wù)器對JSP進(jìn)行pre compil

2、e的時候。如果你的 WEBKPP 下都用了大量的第三方j(luò)ar,其大小超過了 jvm默認(rèn)的大小(4M)那么就會產(chǎn)生此錯誤信息了。解決方法:1. 手動設(shè)置 MaxPermSize 大小修 改 TOMCAT_HOME/bin/catalina.bat ( Linux 下 為 catalina.sh ), 在 “ echo Using CATALINA_BASE: $CATALINA_BASE上面加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512mcatalina.sh 下為:JAVA_OPTS=$

3、JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m2. 將相同的第三方 jar 文件移置到 tomcat/shared/lib 目錄下,這樣可以達(dá)到減少 jar 文 檔重復(fù)占用內(nèi)存的目的。如果遇到這個異常: java.lang.OutOfMemoryError: Java heap space是什么原因呢?解釋:Heap size 設(shè)置JVM堆的設(shè)置是指java程序運(yùn)行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動的時候會自動設(shè)置 Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是

4、物理內(nèi)存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進(jìn)行設(shè)置。Heap size 的大小是 Young Generation 和 Tenured Generaion 之和。提示:在JVM中如果98%的時間是用于 GC且可用的Heap size 不足2%的時候?qū)伋龃水?常信息。提示:Heap Size最大不要超過可用物理內(nèi)存的80%, 一般的要將-Xms和-Xmx選項設(shè)置為相同,而-Xmn為1/4的-Xmx值。解決方法:手動設(shè)置 Heap size修 改 TOMCAT_HOME/bin/catalina.bat , 在 “ echo Using CATALINA_BASE

5、: $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另外看到了另外一個帖子,覺得挺好,摘抄如下:主題 : 分析 java.lang.OutOfMemoryError: PermGen spa

6、ceSUN JDK+Tomcat 5.5.20 運(yùn)行服 務(wù)的 時候 遇到 問題 ,服 務(wù)器 跑幾 天后 就會 掛掉 ,并 報 java.lang.OutOfMemoryError: PermGen space 異常。發(fā)現(xiàn)很多人把問題歸因于: spring,hibernate,tomcat ,因為他們動態(tài)產(chǎn)生類 , 導(dǎo)致 JVM 中的 permanent heap 溢出 。然后解決方法眾說紛紜, 有人說升級 tomcat 版本到最新甚至干脆不 用 tomcat 。還有人懷疑 spring 的問題,在 spring 論壇上討論很激烈,因為 spring 在 AOP 時使用 CBLIB 會動態(tài)產(chǎn)生很

7、多類。但問題是為什么這些王牌的開源會出現(xiàn)同一個問題呢,那么是不是更基礎(chǔ)的原因呢? tomcat 在Q&A很隱晦的回答了這一點(diǎn),我們知道這個問題,但這個問題是由一個更基礎(chǔ)的問題產(chǎn)生。于是有人對更基礎(chǔ)的JVM做了檢查,發(fā)現(xiàn)了問題的關(guān)鍵。 原來SUN的JVM把內(nèi)存分了不同的區(qū),其中一個就是 permenter區(qū)用來存放用得非常多的類和類描述。本來SUN設(shè)計的時候認(rèn)為這個區(qū)域在JVM啟動的時候就固定了,但他沒有想到現(xiàn)在動態(tài)會用得這么廣泛。而且這個 區(qū)域有特殊的垃圾收回機(jī)制,現(xiàn)在的問題是動態(tài)加載類到這個區(qū)域后,gc 根本沒辦法回收!2003 年的時候就有一個 bug 報告給 sun ,但是到現(xiàn)在,這個

8、bug 還沒有 close !有人在這個 bug 加了句評語: “ A bug this critical is open since 2003? Absolutely shameful.” 我覺得SUN在這個BUG上確實有些丟臉。對這個bug最徹底的解決辦法就是不要用SUN的 JDK而改用BEA的JRokit.打不過,還逃不過嗎? 有眾多的選擇,這就是開源的好。 :)最后,給出幾篇文章供大家學(xué)習(xí)參考:Java 虛擬機(jī)的選項: /show/3/7/20061112220131.htmHot Spot JVM5 中的 GC調(diào)優(yōu):http:/www.tot.na

9、me/show/3/7/20061112220201.htm1、PermGen space 的 全 稱 是 Permanent Generation space, 是 指 內(nèi) 存 的 永 久 保 存 區(qū) 域 OutOfMemoryError: PermGen space 從表面上看就是內(nèi)存益出,解決方法也一定是加大內(nèi)存。 說說為什么會內(nèi)存益出: 這一部分用于存放 Class 和 Meta 的信息 ,Class 在被 Load 的時候被 放入 PermGenspace 區(qū)域,它和和存放 Instance 的 Heap 區(qū)域不同 ,GC(Garbage Collection) 不會在主程序運(yùn)行期對

10、 PermGenspace進(jìn)行清理,所以如果你的APP會LOAD很多CLASS的話, 就很可能出現(xiàn) PermGen space錯誤。這種錯誤常見在web服務(wù)器對JSP進(jìn)行pre compile 的時候。改正方法: -Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m2、在 tomcat 中 redeploy 時出現(xiàn) outofmemory 的錯誤 .可以有以下幾個方面的原因 :1 ,使用了 proxool,因為proxool內(nèi)部包含了一個老版本的cglib.2, log4j, 最好不用 , 只用 common-logging3,

11、老版本的 cglib, 快點(diǎn)更新到最新版。4, 更新到最新的 hibernate3.23、這里以tomcat環(huán)境為例,其它 WEB服務(wù)器如jboss,weblogic等是同一個道理。一、java .Ian g.OutOfMemoryError: PermGe n spacePermGen space 的全稱是 Permanent Generation space, 是指內(nèi)存的永久保存區(qū)域 ,這塊內(nèi)存主要是被 JVM存放Class和Meta信息的,Class在被Loader時就會被放到 PermGen space 中 ,它和存放類實例 (Instance) 的 Heap 區(qū)域不同 ,GC(Gar

12、bage Collection) 不會在主程序運(yùn)行期對PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很多CLASS的話,就很可能出現(xiàn) PermGenspace 錯誤 ,這種錯誤常見在 web服務(wù)器對JSP進(jìn)行pre compile的時候。如果你的 WEB AP下都用了大量的第三方 jar, 其大小超過了 jvm 默認(rèn)的大小 (4M) 那么就會產(chǎn)生此錯誤信息了。解決方法: 手動設(shè)置 MaxPermSize 大小修改 TOMCAT_HOME/bin/catalina.sh在“ echo Using CATALINA_BASE: $CATALINA_BASE ” 上面加入以下行:JAVA_

13、OPTS=-server -XX:PermSize=64M -XX:MaxPermSize=128m建議:將相同的第三方 jar 文件移置到 tomcat/shared/lib 目錄下,這樣可以達(dá)到減少 jar 文 檔重復(fù)占用內(nèi)存的目的。二、java.lang.OutOfMemoryError: Java heap spaceHeap size 設(shè)置JVM堆的設(shè)置是指java程序運(yùn)行過程中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ū)伋龃水?常信息。提示: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_BA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論