tomcat默認(rèn)可以使用的內(nèi)存為128MB,在較大型的應(yīng)用項(xiàng)目中,這點(diǎn)內(nèi)存是不夠的,輕微時(shí),會(huì)使系統(tǒng)性能急劇下降,嚴(yán)重時(shí),將導(dǎo)致系統(tǒng)無法運(yùn)行,影響系統(tǒng)的穩(wěn)定性。當(dāng)內(nèi)存不夠用時(shí),常見的問題就是報(bào)tomcat內(nèi)存益處錯(cuò)誤,從兒導(dǎo)致客戶端包500錯(cuò)誤的,如下當(dāng)用戶執(zhí)行一個(gè)大數(shù)據(jù)的應(yīng)用時(shí),系統(tǒng)會(huì)提示出錯(cuò): 前臺(tái)錯(cuò)誤為:HTTP Status 500-Dispatch[EAITool] to method listCurTree retrun an exception (以下省略) 后臺(tái)錯(cuò)誤為:java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start(Native Method) at org.apache.catalina.loader.WebappLoader.notifyContext(WebappLoader.ja va:847) 這是由于TOMCAT內(nèi)存溢出而引發(fā)的問題,主要原因是JVM的虛擬內(nèi)存默認(rèn)為128M,當(dāng)超過這個(gè)值時(shí)就把先前占用的內(nèi)存釋放,而導(dǎo)致好象TCP/IP丟包的假象,出現(xiàn)HTTP500的錯(cuò)誤。  (注意,如果單獨(dú)運(yùn)行一個(gè).class文件,想設(shè)置jvm內(nèi)存的話,按如下方法: -Xms set initial Java heap size -Xmx set maximum Java heap size -Xss set java thread stack size 比如:java -Xmx512M HelloWorld.class,讓jvm使用512Mheap內(nèi)存. 解決方法主要是加大TOMCAT可利用內(nèi)存,并在程序當(dāng)中加大內(nèi)存使用。因此根據(jù)應(yīng)用的需求,有必要調(diào)整JVM使用內(nèi)存的大小。現(xiàn)在將手工修改tomcat內(nèi)存的方法及注意事項(xiàng)列出,希望能對(duì)新人有所幫助。 tomcat提供了兩種安裝模式,即免安裝(*.zip)和安裝(*.exe)方式。針對(duì)不同的安裝方式下修改tomcat內(nèi)存大小的方法幾注意問題(windows環(huán)境): 方式1:當(dāng)選擇安裝方式時(shí),可以在安裝tomcat的過程進(jìn)行設(shè)置tomcat初始化內(nèi)存的大小。但是假如說在安裝時(shí)沒有選擇,或者應(yīng)用改變了,需要增加tomcat內(nèi)存時(shí)怎么半呢?此時(shí),我們就要手工修改tomcat的一些文件了: 看了很多網(wǎng)上的資料,都是說修改\bin\catalina.bat文件的內(nèi)容,即在里面增加一行代碼: set JAVA_OPTS=-Xms512m -Xmx512m //表示初始化最小可用內(nèi)存和最大可用內(nèi)存都是512MB(修改相應(yīng)值即可) 如在catalina.bat的 rem ----- Execute The Requested Command echo Using CATALINA_BASE: %CATALINA_BASE% echo Using CATALINA_HOME: %CATALINA_HOME% echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR% echo Using JAVA_HOME: %JAVA_HOME% 這一欄改為 rem ----- Execute The Requested Command set JAVA_OPTS=-Xms512m -Xmx512m echo Using CATALINA_BASE: %CATALINA_BASE% echo Using CATALINA_HOME: %CATALINA_HOME% echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR% echo Using JAVA_HOME: %JAVA_HOME% 就可以將JAVA虛擬機(jī)分配內(nèi)存 508.0625MB的! 但是很多人修改后,發(fā)現(xiàn)修改并沒有起作用,即通過windows的服務(wù)啟動(dòng)tomcat時(shí),實(shí)際的內(nèi)存還是默認(rèn)的,修改的設(shè)置并沒有起作用;而通過\bin\startup.bat 啟動(dòng)卻是生效的。這是為什么呢?因?yàn)樵诎惭b過程中,JVM的初始化參數(shù)已經(jīng)寫在注冊(cè)表中了,由于沒有修改注冊(cè)表中相關(guān)參數(shù),所以以windows服務(wù)方式啟動(dòng)時(shí),修改的并沒有生效。而通過\bin\startup.bat 啟動(dòng)直接是通過\bin\catalina.bat文件中的配置的。你需要重新加載到系統(tǒng)服務(wù)中才生效,或者你手工在注冊(cè)表中查找修改啟動(dòng)值,加載到服務(wù)中的時(shí)候參數(shù)已經(jīng)配置好了,自己修改artup.bat不會(huì)改變注冊(cè)表中的參數(shù)設(shè)置。 解決方法:修改注冊(cè)表中的參數(shù),加入JVM初始化內(nèi)存的參數(shù): 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 如加入 -Xms512m -Xmx800m