JVM內存溢出之tomcat配置

JVM內存溢出常見的有一下兩種:html

第一種:java.lang.OutOfMemoryError: PermGen spacejava

第二種:java.lang.OutOfMemoryError: Java heap spaceapache

第一種異常緣由是由於咱們項目中須要加載的文件太多所致使,項目發佈時class文件和jar文件會被加載到jvm的永久區,當永久區空間不足時則會拋出 java.lang.OutOfMemoryError: PermGen space;windows

第二種爲堆棧溢出,此異常在項目運行其產生,因爲運行期產生太多的對象實例而沒有被gc,因此纔會拋出該異常;tomcat

針對以上兩種異常,和Tomcat使用狀況的不一樣,有以下三種解決方案:jvm

1 、Tomcat解壓版  經過startup.bat腳本運行:spa

      當咱們經過startup.bat運行tomcat時,須要記事本catalina.bat並找到日誌

echo Using CATALINA_BASE:   "%CATALINA_BASE%"該行,server

而後在上面添加htm

set JAVA_OPTS=%JAVA_OPTS% -server -Xms100m -Xmx1024m -XX:PermSize=20m -XX:MaxPermSize=100m

並將參數設置合理值。

2. Tomcat解壓版 註冊爲系統服務

解壓版註冊爲系統服務方式爲,cmd 進入tomcat/bin目錄而後執行service.bat install 服務名稱;

當你下載的解壓文件中沒有service.bat請到官網從新下載,你可能不會遇到該問題,但我遇到了!

此時咱們能夠打開系統服務管理界面看到咱們註冊成功的tomcat服務

如上圖我註冊的系統服務爲:tomcat9090,此時咱們就能夠在此關閉和啓動tomcat服務,並能夠設置爲開機自啓;

若是服務註冊成功卻沒法啓動,如:

或者錯誤代碼爲1;

請查看Tomcat logs日誌,開發中看日誌,和記錄日誌相當重要。

沒法啓動可能有一下緣由:

2.1,也是網上挺多的:將JDK中BIN下的 msvcr71.dll 複製到 TOMCAT 中的 BIN 下(沒有解決問題)

2.2,檢查jdk版本是否過低

2.3,查看jdk和tomcat是否都是32位或64位,當二者位數不一樣是經過startup.bat腳本是能夠啓動,但當註冊爲系統服務時是無  法啓動的,固然tomcat安裝版也同樣,要使用位數相同,且版本更新時間相近;

2.4,當tomcat服務能夠啓動,但在啓動過程當中中止,請查看logs日誌,此時最大可能爲PermGen space,解決方案爲

2.4.1:

卸載服務:cmd 進入tomcat/bin目錄而後執行service.bat uninstall 服務名稱;

而後打開service.bat文件找到

--JvmOptions "-Dcatalina.home=%CATALINA_HOME%;.................E%\conf\logging.properties"並在尾部添加

-XX:PermSize=20m;-XX:MaxPermSize=100m參數之間以「;」相隔

如:「...............conf\logging.properties;-XX:PermSize=20m;-XX:MaxPermSize=100m"參數值按我的所需設定;

並設置下列兩個參數:

    --JvmMs 128 ^
    --JvmMx 1024

以上設置完成後請從新註冊系統服務;

2.4.2:打開註冊表

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat9090\Parameters\Java

Options右擊,修改,添加-XX:PermSize=20m;-XX:MaxPermSize=100m

如圖:

而後重啓服務;

3.Tomcat 安裝版,如出現沒法安裝,或沒法啓動等問題請參考2.2至2.4解決方案;

JVM內存參數說明請參考官網:

http://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html

累屁了,回家吃飯。。。。。

相關文章
相關標籤/搜索