linux/centos 解決Tomcat記憶體溢出,centostomcat

來源:互聯網
上載者:User

linux/centos 解決Tomcat記憶體溢出,centostomcat
        Tomcat本身不能直接在電腦上運行,需要依賴於作業系統和一個JAVA虛擬機器。JAVA程式啟動時JVM會分配一個初始記憶體和最大記憶體給APP。當APP需要的記憶體超出記憶體的最大值時虛擬機器就會提示記憶體溢出,並且導致應用服務崩潰。


一、常見的Java記憶體溢出有以下三種:

1. java.lang.OutOfMemoryError: Java heap space      即JVM Heap溢出


解釋說明:JVM在啟動的時候會自動化佈建JVM Heap的值,JVM堆的設定是指java程式運行過程中JVM可以調配使用的記憶體空間的設定。其初始空間預設是實體記憶體的1/64,最大空間不可超過實體記憶體。JVM提供-Xmn -Xms -Xmx等選項來進行設定。

出錯情境:在JVM中,如果98%的時間是用於GC,且可用的Heap size不足2%時,將會出現JVM Heap溢出

解決方案:修改JVM Heap的大小。



2. java.lang.OutOfMemoryError: PermGen space        即PermGen space溢出


解釋說明:PermGen space是指記憶體的永久儲存地區。這個地區主要存放Class和Meta資訊,Class在被Load時就會被放入PermGen space。


出錯情境:如果APP載入很多CLASS,就可能會出現PermGen space溢出。(因為sun的GC不會在程式運行時對PermGen space進行清理)常見於web伺服器對JSP進行pre compile的時候
 
解決方案:修改MaxPermSize大小



3. java.lang.StackOverflowError                                  即棧溢出


解釋說明:JVM採用的是棧式的虛擬機器,函數的調用過程都體現在堆棧和退棧上。

出錯情境:通常棧的大小是1-2MB的,如果調用建構函式的 “層”太多,則會出現棧溢出

解決方案:修改程式



二、Tomcat的JVM記憶體溢出解決方案
在生產環境中,tomcat記憶體設定不好很容易出現JVM記憶體溢,解決方案就是修改Tomcat中的catalina.sh檔案。

在catalina.sh檔案中,找到cygwin=false,在這一行的前面加入參數,具體如下


# vi TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m" 

其他說明:
1.“m”說明單位是MB,否則預設是KB
2.一般使用實體記憶體的80%作為堆大小
3.一般把-Xms和-Xmx設為一樣大
4.一般把-Xmn設定為-Xmx值的1/4
5.一般將堆的總大小的50%到60%分配給新產生的池


三、jvm參數說明:
-server                                          一定要作為第一個參數,啟用JDK的server版本,在多個CPU時效能佳 
-Xms                                             java Heap初始大小。 預設是實體記憶體的1/64。
-Xmx                                             java heap最大值。建議均設為實體記憶體的80%。不可超過實體記憶體。
-Xmn                                             java heap最小值,一般設定為Xmx的3、4分之一。
-XX:PermSize                               設定記憶體的永久儲存區初始大小,預設值為64M。
-XX:MaxPermSize                        設定記憶體的永久儲存區最大大小,預設值為64M。
-XX:SurvivorRatio=2                     生還者池的大小,預設是2。如
-XX:NewSize                                新產生的池的初始大小。 預設值為2M。
-XX:MaxNewSize                         新產生的池的最大大小。 預設值為32M。
+XX:AggressiveHeap                   讓jvm忽略Xmx參數,瘋狂地吃完一個G實體記憶體,再吃盡一個G的swap。 
-Xss                                              每個線程的Stack大小
-verbose:gc                                  現實垃圾收集資訊
-Xloggc:gc.log                              指定垃圾收集記錄檔
-XX:+UseParNewGC                   縮短minor收集的時間
-XX:+UseConcMarkSweepGC     縮短major收集的時間
-XX:userParNewGC                     可用來設定並行收集(多CPU)
-XX:ParallelGCThreads                可用來增加並行度(多CPU)
-XX:UseParallelGC                       設定後可以使用並行清除收集器(多CPU)
TOMCAT 記憶體溢出錯誤

先試試這個:
-Xms64m
-Xmx256m
-XX:PermSize=128M
-XX:MaxNewSize=256m
-XX:MaxPermSize=256m

下面是找了2篇文章

答案1
設定Tomcat啟動的初始記憶體
其初始空間(即-Xms)是實體記憶體的1/64,最大空間(-Xmx)是實體記憶體的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可
進行設定
三、執行個體,以下給出1G記憶體環境下java jvm 的參數設定參考:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
JAVA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:
NewSize=192m -XX:MaxNewSize=384m"
CATALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m
-XX:NewSize=192m -XX:MaxNewSize=384m"
Linux:
在/usr/local/apache-tomcat-5.5.23/bin 目錄下的catalina.sh
添加:JAVA_OPTS='-Xms512m -Xmx1024m'
要加“m”說明是MB,否則就是KB了,在啟動tomcat時會 報記憶體不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat啟動tomcat,OK設定生效.夠成功的分配200M記憶體.
但是如果不是執行startup.bat啟動tomcat而是利用windows的系統服務啟動tomcat服務,上面的設定就不生效了,
就是說set JAVA_OPTS=-Xms128m -Xmx350m 沒起作用.上面分配200M記憶體就OOM了..
windows服務執行的是bin\tomcat.exe.他讀取註冊表中的值,而不是catalina.bat的設定.
解決辦法:
修改註冊表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
加入 -Xms300m -Xmx350m
重起tomcat服務,設定生效

答案2
Tomcat 的JVM 記憶體溢出問題的解決
關鍵字: tomcat 的jvm 記憶體溢出問題的解......餘下全文>>
 
tomcat提示記憶體溢出,怎解決

Perm區溢出了,可能是你的SSH包加了之後預設啟動載入的東西多了導致的。
java虛擬機器對非堆區記憶體配置的兩個參數:
1、-XX:PermSize:表示非堆區初始記憶體配置大小,其縮寫為permanent size(持久化記憶體)
2、-XX:MaxPermSize:表示對非堆區分配的記憶體的最大上限。

配置這兩個啟動參數試試
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.