目前為止,我遇到使用Tomcat有三種情況:第一,使用Eclipse,在Eclipse中配置Tomcat。第二,直接在Tomcat中部署項目。第三將Tomcat安裝為windows服務。
在這三種情況下,出現OutOfMemoryError.該怎麼解決呢?這裡我不得不提我被網上那些不負責任的文章害得很慘。各種設置內存的方法都試了,可就是不起作用。下面我說的這幾種方法都是我親自試驗過的,沒有問題。
第一種情況:
如圖:我用紅色框框出來的。其中Xms和Xmx是增加java虛擬機初始堆大小和最大堆大小參數,主要是解決由於Java Heap Space不足造成的原因。 XX:PermSize和XX:MaxPermSize是增加初始永久保存區域大小和最大永久保存區域大小的參數,主要解決程序中使用了大量的jar或class,java虛擬機裝載類的空間不夠,與Permanent Generation space有關。
第二種情況:
直接把編譯好的項目放在Tomcat中,採用startup.bat啟動Tomcat服務。如下在Tomca的bin文件夾下:
這種情況下,我們要修改catalina.bat裡面的參數。打開它。找到這兩句:
rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
在這兩句之上加上這句,一定要之上:set "JAVA_OPTS=-Xms512M -Xmx1024M -XX:PermSize=256m -XX:MaxPermSize=512m"
網上很多類似的,但是試過好多都不行,一定要注意:它的位置,和引號等細節。
第三種情況:
如果你的tomcat是註冊為windows服務並且是以服務方式啟動的,那麼上面的方法就無效了,因為這時tomcat啟動是讀取註冊表的參數,而不是讀取批處理文件的參數,這時我們來這樣設置jvm參數。 :在Tomcat的bin目錄下找到tomcat7w.exe,打開:
在java選項下:下方的Initial memory pool就是初始化堆內存大小,Maximun memory pool是最大堆內存大小。而要設置Perm Gen池的大小就要在Java Option裡面加參數了,在裡面加上:
-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
(每一行後面不要有空格)這種方法我試過了,管用呢。還可以通過直接在註冊表中添加參數。這個就不介紹了,自己沒試過。
其實解決Tomcat內存的問題並不難,難得是你怎麼知道這是由於Tomcat內存溢出異常造成的。我們之前在這個問題上困擾了好久。如果使用Eclipse,console裡會打印出錯誤信息,那麼直接就可以判斷是OutOfMemoryError,如果是直接部署到Tomcat中,以startup.bat啟動,則也可以看到打印出來的錯誤信息。可是我們偏偏是把Tomcat服務安裝成了Windows的服務,那麼看不到任何錯誤的提示。項目啟動後,一直都處於等待狀態,很慢很慢,讓人摸不著頭腦, 正趕上數據庫也弄罷工,就一直以為是數據庫問題。總之一句話:經驗不足。
以上就是關於解決Java中OutOfMemoryError的全部內容,希望對大家的學習有所幫助。