解決Java中OutOfMemoryError的問題
目前為止,我遇到使用Tomcat有三種情況:第一,使用Eclipse,在Eclipse中配置Tomcat。第二,直接在Tomcat中部署項(xiàng)目。第三將Tomcat安裝為windows服務(wù)。
在這三種情況下,出現(xiàn)OutOfMemoryError.該怎么解決呢?這里我不得不提我被網(wǎng)上那些不負(fù)責(zé)任的文章害得很慘。各種設(shè)置內(nèi)存的方法都試了,可就是不起作用。下面我說的這幾種方法都是我親自試驗(yàn)過的,沒有問題。
第一種情況:
如圖:我用紅色框框出來的。其中Xms和Xmx是增加java虛擬機(jī)初始堆大小和最大堆大小參數(shù),主要是解決由于Java Heap Space不足造成的原因。XX:PermSize和XX:MaxPermSize是增加初始永久保存區(qū)域大小和最大永久保存區(qū)域大小的參數(shù),主要解決程序中使用了大量的jar或class,java虛擬機(jī)裝載類的空間不夠,與Permanent Generation space有關(guān)。

第二種情況:
直接把編譯好的項(xiàng)目放在Tomcat中,采用startup.bat啟動(dòng)Tomcat服務(wù)。如下在Tomca的bin文件夾下:

這種情況下,我們要修改catalina.bat里面的參數(shù)。打開它。找到這兩句:
rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
在這兩句之上加上這句,一定要之上:set "JAVA_OPTS=-Xms512M -Xmx1024M -XX:PermSize=256m -XX:MaxPermSize=512m"
網(wǎng)上很多類似的,但是試過好多都不行,一定要注意:它的位置,和引號(hào)等細(xì)節(jié)。
第三種情況:
如果你的tomcat是注冊(cè)為windows服務(wù)并且是以服務(wù)方式啟動(dòng)的,那么上面的方法就無效了,因?yàn)檫@時(shí)tomcat啟動(dòng)是讀取注冊(cè)表的參數(shù),而不是讀取批處理文件的參數(shù),這時(shí)我們來這樣設(shè)置jvm參數(shù)。:在Tomcat的bin目錄下找到tomcat7w.exe,打開:

在java選項(xiàng)下:下方的Initial memory pool就是初始化堆內(nèi)存大小,Maximun memory pool是最大堆內(nèi)存大小。而要設(shè)置Perm Gen池的大小就要在Java Option里面加參數(shù)了,在里面加上:
-Dcatalina.base=%tomcat_home%
-Dcatalina.home=%tomcat_home%
-Djava.endorsed.dirs=%tomcat_home%\endorsed
-Djava.io.tmpdir=%tomcat_home%\temp
-XX:PermSize=256M
-XX:MaxPermSize=256M
-XX:ReservedCodeCacheSize=48M
-Duser.timezone=GMT+08
(每一行后面不要有空格)這種方法我試過了,管用呢。還可以通過直接在注冊(cè)表中添加參數(shù)。這個(gè)就不介紹了,自己沒試過。
其實(shí)解決Tomcat內(nèi)存的問題并不難,難得是你怎么知道這是由于Tomcat內(nèi)存溢出異常造成的。我們之前在這個(gè)問題上困擾了好久。如果使用Eclipse,console里會(huì)打印出錯(cuò)誤信息,那么直接就可以判斷是OutOfMemoryError,如果是直接部署到Tomcat中,以startup.bat啟動(dòng),則也可以看到打印出來的錯(cuò)誤信息??墒俏覀兤前裈omcat服務(wù)安裝成了Windows的服務(wù),那么看不到任何錯(cuò)誤的提示。項(xiàng)目啟動(dòng)后,一直都處于等待狀態(tài),很慢很慢,讓人摸不著頭腦, 正趕上數(shù)據(jù)庫(kù)也弄罷工,就一直以為是數(shù)據(jù)庫(kù)問題??傊痪湓挘航?jīng)驗(yàn)不足。
以上就是關(guān)于解決Java中OutOfMemoryError的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
關(guān)于mybatis傳入?yún)?shù)一直為null的問題
這篇文章主要介紹了關(guān)于mybatis傳入?yún)?shù)一直為null的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Java手機(jī)號(hào)最新校驗(yàn)規(guī)則
在Java中,進(jìn)行手機(jī)號(hào)校驗(yàn)通常使用正則表達(dá)式(Regex)來匹配手機(jī)號(hào)的格式,以下是一個(gè)基于當(dāng)前(截至2024年)中國(guó)手機(jī)號(hào)規(guī)則的校驗(yàn)方法,感興趣的朋友跟隨小編一起看看吧2024-05-05
一文解決System.in關(guān)閉后無法再繼續(xù)使用流的問題
這篇文章主要給大家介紹如何解決System.in關(guān)閉后無法再繼續(xù)使用流的問題,文中有詳細(xì)的解決方法和代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07
解讀Spring定義Bean的兩種方式:<bean>和@Bean
這篇文章主要介紹了Spring定義Bean的兩種方式:<bean>和@Bean,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

