當Tomcat 出現「javax.servlet.ServletException: Java heap space」錯誤

在改了JSP程式上傳到伺服器之後
突然發生這個錯誤
從網路找了一些檔案跟自己研究出來的結果

應該是Tomcat記憶體不足
無法完成編譯的動作
(無法將JSP轉換成JAVA檔案)

在網路上有找到兩篇文章

第一篇是
http://www.blogjava.net/etlan/archive/2007/04/29/114575.html

If Java runs out of memory, the following error occurs:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Java heap size can be increased as follows:

java -Xms -Xmx
Defaults are:
java -Xms32m -Xmx128m

如果你用win
/tomcat/bin/catalina.bat 加上下面的命令:
set JAVA_OPTS=-Xms32m -Xmx256m

如果你用unix/linux
/tomcat/bin/catalina.sh 加上下面的命令:
JAVA_OPTS="-Xms32m -Xmx256m"

第二篇是
http://hi.baidu.com/dou_ye/blog/item/8ff0fe3d5490da04baa167ec.html

jvm內存不足

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"

不過因為我這裡的平台雖然是Windows Server 2003安裝Apache Tomcat
Apache Tomcat是利用服務的方式啟動

所以在服務中尋找名稱是Apache Tomcat
會看到執行檔啟動路徑
例如~

"C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin\tomcat5.exe" //RS//Tomcat5

本來應該是要利用微軟的工具去修改服務
不過為了趕快解決這個問題
我是利用
執行->Regedit去編輯登錄檔
找出所有有關

"C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin\tomcat5.exe" //RS//Tomcat5

這樣的登錄值
修改為

"C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin\tomcat5.exe" //RS//Tomcat5 --JvmMs=64 --JvmMx=256

參數的方式是從Java World上看來的
http://www.javaworld.com.tw/jute/post/view?bid=9&id=200057&sty=1&tpg=9&age=0

要設定的記憶體大小
端看自己伺服器的配備要修改的伺服器記憶體僅有1GB
所以目前就先設定成這樣再觀察看看

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>