關於tomcat的記憶體引數優化——如何配置catalina.sh的JAVA_OPTS?
以下是實體記憶體為16G的建議配置:
export JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xss256k -XX:PermSize=256m -XX:MaxPermSize=4096m -XX:NewSize=512m -XX:MaxNewSize=2048m -XX:+DisableExplicitGC -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"
專案 |
參考值 |
說明 |
-server |
無 |
Tomcat以server模式執行,將擁有更大、更高的併發處理能力,更快更強捷的JVM垃圾回收機制,可以獲得更多的負載與吞吐量,生產環境必須加上。 |
-Xms |
4096m |
推薦為可用記憶體的1/4的80%~100%,16G記憶體,配置為4G |
-Xmx |
4096m |
-Xms –Xmx 一般的要將-Xms和-Xmx選項設定為相同堆記憶體分配 (訪問量比較大時設為一致) |
-Xss |
256k |
指設定每個執行緒的堆疊大小 一般是128k或者256k(這個值注意默值512K,有時會出現這個過小,tomcat起不來情況。所有根據的專案設定,反正越小越好) |
-Xmn |
256m |
一般來說, -Xmn128-256m就夠了 |
-XX:PermSize |
256m |
非堆的初始值[實體記憶體的1/64] |
-XX:MaxPermSize |
4096m |
非堆的最大值[實體記憶體的1/4] |
-XX:NewSize |
512m |
|
-XX:MaxNewSize |
2048m |
|
-XX:+DisableExplicitGC |
|
程式程式碼中不允許有顯示的呼叫”System.gc()” |
-XX:+AggressiveOpts |
|
啟用這個引數,則每當JDK版本升級時,你的JVM都會使用最新加入的優化技術(如果有的話) |
-XX:+UseBiasedLocking |
|
啟用一個優化了的執行緒鎖,我們知道在我們的 |
-XX:MaxTenuringThreshold |
31 |
設定垃圾最大年齡 |
-XX:+UseConcMarkSweepGC |
|
即CMS gc 我們知道頻頻繁的GC會造面JVM的大起大落從而影響到系統的效率,因此使用了CMS GC後可以在GC次數增多的情況下,每次GC的響應時間卻很短,比如說使用了CMS GC後經過jprofiler的觀察,GC被觸發次數非常多,而每次GC耗時僅為幾毫秒。 |
-XX:+CMSParallelRemarkEnabled |
|
在使用UseParNewGC 的情況下, 儘量減少 mark 的時間 |
-XX:+UseCMSCompactAtFullCollection |
|
在使用concurrent gc 的情況下, 防止 memoryfragmention, 對live object 進行整理, 使memory 碎片減少 |
-XX:LargePageSizeInBytes |
128m |
指定 Java heap的分頁頁面大小 |
-XX:+UseFastAccessorMethods |
|
get,set方法轉成原生代碼 |
-XX:+UseCMSInitiatingOccupancyOnly |
|
|
-Djava.awt.headless |
true |
|
|
|
|