解決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是注冊為windows服務(wù)并且是以服務(wù)方式啟動(dòng)的,那么上面的方法就無效了,因?yàn)檫@時(shí)tomcat啟動(dòng)是讀取注冊表的參數(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
(每一行后面不要有空格)這種方法我試過了,管用呢。還可以通過直接在注冊表中添加參數(shù)。這個(gè)就不介紹了,自己沒試過。
其實(shí)解決Tomcat內(nèi)存的問題并不難,難得是你怎么知道這是由于Tomcat內(nèi)存溢出異常造成的。我們之前在這個(gè)問題上困擾了好久。如果使用Eclipse,console里會(huì)打印出錯(cuò)誤信息,那么直接就可以判斷是OutOfMemoryError,如果是直接部署到Tomcat中,以startup.bat啟動(dòng),則也可以看到打印出來的錯(cuò)誤信息。可是我們偏偏是把Tomcat服務(wù)安裝成了Windows的服務(wù),那么看不到任何錯(cuò)誤的提示。項(xiàng)目啟動(dòng)后,一直都處于等待狀態(tài),很慢很慢,讓人摸不著頭腦, 正趕上數(shù)據(jù)庫也弄罷工,就一直以為是數(shù)據(jù)庫問題。總之一句話:經(jīng)驗(yàn)不足。
以上就是關(guān)于解決Java中OutOfMemoryError的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
使用java技術(shù)抓取網(wǎng)站上彩票雙色球信息詳解
這篇文章主要介紹了使用java技術(shù)抓取網(wǎng)站上彩票雙色球信息詳解,web結(jié)果由html+js+css組成,html結(jié)構(gòu)都有一定的規(guī)范,數(shù)據(jù)動(dòng)態(tài)交互可以通過js實(shí)現(xiàn)。,需要的朋友可以參考下2019-06-06SpringBoot?+?proguard+maven多模塊實(shí)現(xiàn)代碼混淆的方法
這篇文章主要介紹了SpringBoot?+?proguard+maven多模塊實(shí)現(xiàn)代碼混淆的方法,多模塊跟單模塊一樣,在需要混淆模塊的pom文件中加入proguard依賴及配置,本文給大家講解的非常詳細(xì),感興趣的朋友一起看看吧2024-02-02Java中Date時(shí)區(qū)的轉(zhuǎn)換代碼示例
這篇文章主要給大家介紹了關(guān)于Java中Date時(shí)區(qū)轉(zhuǎn)換的相關(guān)資料,當(dāng)在不同的時(shí)區(qū)使用相同程序,時(shí)間的值只會(huì)為當(dāng)?shù)貢r(shí)間,這樣就會(huì)造成時(shí)間混亂,需要的朋友可以參考下2023-07-07Java實(shí)現(xiàn)導(dǎo)出word表格的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言導(dǎo)出word表格功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下2022-12-12mybatisPlus 實(shí)體類與數(shù)據(jù)庫表映射關(guān)系詳解
這篇文章主要介紹了mybatisPlus 實(shí)體類與數(shù)據(jù)庫表映射關(guān)系詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01Netty進(jìn)階之EventExecutorGroup源碼詳解
這篇文章主要介紹了Netty進(jìn)階之EventExecutorGroup源碼詳解,EventExecutorGroup繼承了JDK的ScheduledExecutroService,那么它就擁有了執(zhí)行定時(shí)任務(wù),執(zhí)行提交的普通任務(wù),需要的朋友可以參考下2023-11-11