設(shè)置Tomcat啟動(dòng)的初始內(nèi)存其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。

可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置

以下給出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 "

JAVA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX: NewSize=192m -XX:MaxNewSize=384m"

CATALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384m"

Linux:

在/usr/local/apache-tomcat-5.5.23/bin 目錄下的catalina.sh添加:

JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”說(shuō)明是MB,否則就是KB了,在啟動(dòng)tomcat時(shí)會(huì) 報(bào)內(nèi)存不足。

-Xms:初始值-Xmx:最大值-Xmn:最小值

Windows

在catalina.bat最前面加入set JAVA_OPTS=-Xms128m -Xmx350m 

如果用startup.bat啟動(dòng)tomcat,OK設(shè)置生效.夠成功的分配200M內(nèi)存.

但是如果不是執(zhí)行startup.bat啟動(dòng)tomcat而是利用windows的系統(tǒng)服務(wù)啟動(dòng)tomcat服務(wù),上面的設(shè)置就不生效了,就是說(shuō)set JAVA_OPTS=-Xms128m -Xmx350m 沒起作用.上面分配200M內(nèi)存就OOM了..

windows服務(wù)執(zhí)行的是bin\tomcat.exe.他讀取注冊(cè)表中的值,而不是catalina.bat的設(shè)置.

解決辦法:

修改注冊(cè)表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions

原值為-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"-Xrs加入 -Xms300m -Xmx350m 

重起tomcat服務(wù),設(shè)置生效


 答案2Tomcat 的JVM 內(nèi)存溢出問題的解決關(guān)鍵字: tomcat 的jvm 內(nèi)存溢出問題的解決 


最近在熟悉一個(gè)開發(fā)了有幾年的項(xiàng)目,需要把數(shù)據(jù)庫(kù)從mysql移植到oracle,首先把jdbc的連接指向mysql,打包放到tomcat里面,可以跑起來(lái),沒有問題,可是當(dāng)把jdbc連接指向oracle的時(shí)候,tomcat就連續(xù)拋java.lang.OutOfMemoryError的錯(cuò)誤,上網(wǎng)google了一下,了解了一下tomcat的運(yùn)行機(jī)制,也解決了問題,share出來(lái),以備查。 

1、首先是:java.lang.OutOfMemoryError: Java heap space 解釋: Heap size 設(shè)置 JVM堆的設(shè)置是指java程序運(yùn)行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4??梢岳肑VM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。