tomcat Java heap 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等是同一個道理。
1、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"」上面加入如下行:
set JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128M"
建議:將相同的第三方jar文件移置到tomcat/shared/lib目錄下,這樣能夠達到減小jar 文檔重複佔用內存的目的。

2、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"」上面加入如下行:
set JAVA_OPTS=-server -Xms800m -Xmx800m -XX:MaxNewSize=256mjava

經測試,同時加上如下內容運行速度更快:web

set CATALINA_OPTS=-Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512mapache

相關文章
相關標籤/搜索