tomcat記憶體溢出(修改catalina.bat後windows啟動tomcat服務沒有效果)

來源:互聯網
上載者:User
轉自:http://java0.javaeye.com/blog/169302Tomcat 預設可以使用的記憶體為128MB,在較大型的應用項目中,這點記憶體是不夠的,輕微時,會使系統效能急劇下降,嚴重時,將導致系統無法運行,影響系統的穩定性。當記憶體不夠用時,常見的問題就是報tomcat記憶體益處錯誤,從兒導致用戶端包500錯誤的,如下:解決方案主要是加大TOMCAT可利用記憶體,並在程式當中加大記憶體使用量。因此根據應用的需求,有必要調整JVM使用記憶體的大小。現在將手工修改tomcat記憶體的方法及注意事項列出,希望能對新人有所協助。

  tomcat提供了兩種安裝模式,即免安裝(*.zip)和安裝(*.exe)方式。針對不同的安裝方式下修改tomcat記憶體大小的方法幾注意問題(windows環境):

  方式1:當選擇安裝方式時,可以在安裝tomcat的過程進行設定tomcat初始化記憶體的大小。但是假如說在安裝時沒有選擇,或者應用改變了,需要增加tomcat記憶體時怎麼半呢?此時,我們就要手工修改tomcat的一些檔案了。

  看了很多網上的資料,都是說修改<CATALINA_HOME>/bin/catalina.bat檔案的內容,即在裡面增加一行代碼:

set JAVA_OPTS=-Xms512m -Xmx512m //表示初始化最小可用記憶體和最大可用記憶體都是512MB(修改相應值即可)

  如在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虛擬機器分配記憶體 508.0625MB的!

  但是很多人修改後,發現修改��沒有起作用,即通過windows的服務啟動tomcat時,實際的記憶體還是預設的,修改的設定並沒有起作用;而通過<CATALINA_HOME>/bin/startup.bat 啟動卻是生效的。這是為什麼呢?因為在安裝過程中,JVM的初始化參數已經寫在註冊表中了,由於沒有修改註冊表中相關參數,所以以windows服務方式啟動時,修改的並沒有生效。而通過<CATALINA_HOME>/bin/startup.bat 啟動直接是通過<CATALINA_HOME>/bin/catalina.bat檔案中的配置的。你需要重新載入到系統服務中才生效,或者你手工在註冊表中尋找修改啟動值,載入到服務中的時候參數已經配置好了,自己修改artup.bat不會改變註冊表中的參數設定。

  解決方案:修改註冊表中的參數,加入JVM初始化記憶體的參數:

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

  方式2:針對免安裝的使用者,也可以通過將tomcat註冊為windows的一個服務的方式來實現:我們可以對service.bat檔案做一些其他修改,使tomcat更加能滿足我們各種不同需求時的要求

1. 如果讓tomcat編譯jsp檔案,就在PR_CLASSPATH中加入J2SDK的tools.jar

  修改前:

set PR_CLASSPATH=%CATALINA_HOME%/bin/bootstrap.jar

  修改後:

set PR_CLASSPATH=%JAVA_HOME%/lib/tools.jar; %CATALINA_HOME%/bin/bootstrap.jar

  2.要使用一個特定的JVM,就要修改jvm的參數;要使註冊的windows服務的啟動方式為自動,增加--Startup Automatic,這個是比較常用的;要用定製的server.xml設定檔並且傳遞多個參數給StartClass,要修改StartParams 的值,各個值之間用分號分隔:

  修改前:

"%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm auto
--StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap
--StartParams start --StopParams stop

  修改後:

"%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm "%JAVA_HOME%/jre/bin/server/jvm.dll"
--StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap
--StartParams "-config; %CUSTOM_SERVERXML_FILE%; -nonaming; start" --StopParams stop
--Startup Automatic

  3. 指定最大和最小的記憶體限制,要增加jvm的初始參數

  修改前:

"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions
"-Dcatalina.base=%CATALINA_BASE%; -Dcatalina.home=%CATALINA_HOME%; -Djava.endorsed.dirs=%CATALINA_HOME%/common/endorsed"
--StartMode jvm --StopMode jvm

  修改後:

"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions
"-Xms128M; -Xmx256M; -Dcatalina.base=%CATALINA_BASE%; -Dcatalina.home=%CATALINA_HOME%; -Djava.endorsed.dirs=%CATALINA_HOME%/common/endorsed"
--StartMode jvm --StopMode jvm

  4.有時註冊windows服務成功後,但是啟動服務時顯示“發生服務特定錯誤: 0.”就是因為jvm沒有指定,修改Jvm auto為Jvm "%JAVA_HOME%/jre/bin/server/jvm.dll"後重新註冊windows服務就可以啟動了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.