PermGen space

exception 
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
com.waytide.filter.EncodingFilter.doFilter(EncodingFilter.java:35) 
root cause 

javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space 
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850) 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779) 
org.apache.jsp.mms_005fmanage_005fview_jsp._jspService(mms_005fmanage_005fview_jsp.java:322) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
com.waytide.filter.EncodingFilter.doFilter(EncodingFilter.java:35) 
root cause 

java.lang.OutOfMemoryError: Java heap space需要解析一個bin文件時出現了,這個異常。找了很多的解決方法都是要修改tomcat或jdk的虛擬內存之類的。但是根本解決不了問題。也有很多朋友遇到類似的問題,但大多的提出的解決方法都是修改虛擬內存之類的。可能是有的是有效的。我以前遇到過。修改了就可以了。 但這次是在一個jsp頁面中讀取一個文件時出現的這個異常信息。最後看到一個帖子寫的好像是不能一下讀取太多的內容到頁面上。下面的是流傳的解決方法:打開tomcatHome\bin\tomcat5w.exe,點擊Java選項卡,然後將會發現其中有這麼兩項: 
Initial memory pool和Maximum memory pool. 
Initial memory pool這個就是初始化設置的內存的大小。 
Maximum memory pool這個是最大內存的大小 
將其中的Initial memory pool設置爲64MB.!!!Success!!! 
設置完了就按確定然後再重啓TOMCAT你就會發現tomcat中jvm可用的內存改變了(anyoneking) 


以tomcat環境爲例,其它WEB服務器如jboss,weblogic等是同一個道理。 
一、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)那麼就會產生此錯誤信息了。 
解決方法: 手動設置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 文檔重複佔用內存的目的。 

二、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.sh 
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行: 
JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章