apache Tomcat 內存不夠用?

簡介

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以通過修改tomcat 的啟動腳本 catalina.sh(windows是catalina.bat) 中設置 JAVA_OPTS 參數。

apache Tomcat 內存不夠用?


JAVA_OPTS參數說明

-server 啟用jdk 的 server 版;

-Xms java虛擬機初始化時的最小內存;

-Xmx java虛擬機可使用的最大內存;

-Xmn:最小值

-XX:PermSize 內存永久保留區域

-XX:MaxPermSize 內存最大永久保留區域

JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置。JVM在啟動的時候會自動設置Heap size的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置,要加“m”說明是MB,否則就是KB了。Heap size 的大小是Young Generation 和Tenured Generaion 之和。

提示:在JVM中如果98%的時間是用於GC且可用的Heap size 不足2%的時候將拋出此異常信息。

apache Tomcat 內存不夠用?


Heap Size

Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。 這兩個值的大小一般根據需要進行設置。初始化堆的大小執行了虛擬機在啟動時向系統申請的內存的大小。一般而言,這個參數不重要。但是有的應用程序在大負載的情況下會急劇地佔用更多的內存,此時這個參數就是顯得非常重要,如果虛擬機啟動時設置使用的內存比較小而在這種情況下有許多對象進行初始 化,虛擬機就必須重複地增加內存來滿足使用。

由於這種原因,我們一般把-Xms和-Xmx設為一樣大,而堆的最大值受限於系統使用的物理內存。一般使用數 據量較大的應用程序會使用持久對象,內存使用有可能迅速地增長。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,並且導致應用服務崩潰。因此一般建議堆的最大值設置為可用內存的最大值的80%。

  • 如果系統花費很多的時間收集垃圾,請減小堆大小。一次完全的垃圾收集應該不超過 3-5 秒。如果垃圾收集成為瓶頸,那麼需要指定代的大小,檢查垃圾收集的詳細輸出,研究 垃圾收集參數對性能的影響。一般說來,你應該使用物理內存的80%作為堆大小。當增加處理器時,記得增加內存,因為分配可以並行進行,而垃圾收集不是並行的。
  • 在重啟你的Tomcat服務器之後,這些配置的更改才會有效。

tomcat參數設置

tomcat啟動加載腳本文件:Windows在文件{tomcathome}/bin/catalina.bat,Unix在文件{tomcathome}/bin/catalina.sh,在這個腳本里面設置JAVA_OPTS變量,如果是windows記得加set

tomcat默認: -Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m

Java_OPTS參數:

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

啟動後可以使用ps查看下進程,可以使用 jmap -heap [pid]來查看到MaxHeapSize 等參數已經生效

apache Tomcat 內存不夠用?


分享到:


相關文章: