1. 程式人生 > >tomcat高性能參數設置

tomcat高性能參數設置

tomcat 高性能 參數設置

1.tomcat啟動參數優化
修改文件
bin/catalina.sh
修改內容
第一個空行加上

export JAVA_OPTS="-server -Xms3072M -Xmx3072M -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=27 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

參數解釋
-server
指定tomcat以server模式運行,而不是client模式,可以獲得更大,更高的並發處理能力,更快更強勁的JVM垃圾回收機制,更多的負載和吞吐量
-Xms -Xmx
指定JVM虛擬機內存都設置最大的,最大化利用系統效率。
檢查是否能設置多大內存命令:./java -Xmx2048m -version。能正常顯示jdk版本即可。
-XX:PermSize
設置非堆內存初始值,在數據量的很大的文件導出時,一定要把這兩個值設置上,否則會出現內存溢出的錯誤。
-XX:MaxPermSize
設置非堆內存最大值
-XX:+DisableExplicitGC
在代碼中不允許顯示的調用"System.gc()"。

-XX:MaxTenuringThreshold
默認15,經歷多少次minor gc才進入老年代。如果設置為0的話,則年輕代對象不經過Survivor區,直接進入年老代。設置為一個較大值可以增加存活時間和年輕代被回收的概率。
-XX:+UseConcMarkSweepGC
使用CMS GC。使用的是gc估算觸發和heap占用觸發。可以在GC次數增多的情況下,每次GC的響應時間卻很短。
-XX:+UseParNewGC
對年輕代采用多線程並行回收,這樣回收得快
-XX:+CMSParallelRemarkEnabled
使用CMS回收機制,減少mark
-XX:+UseCMSCompactAtFullCollection
CMS是不會移動內存的, 因此, 這個非常容易產生碎片, 導致內存不夠用, 因此, 內存的壓縮這個時候就會被啟用。 增加這個參數是個好習慣。可能會影響性能,但是可以消除碎片
-XX:LargePageSizeInBytes
指定Java heap的分頁頁面大小
-XX:+UseFastAccessorMethods
原始類型的快速優化get,set 方法轉成本地代碼
-XX:+UseCMSInitiatingOccupancyOnly
使用手動定義初始化定義開始CMS收集,禁止hostspot自行觸發CMS GC
-Djava.awt.headless=true
Headless模式是系統的一種配置模式。在該模式下,系統缺少了顯示設備、鍵盤或鼠標。設置為true可以保證程序運行正確。

沒試過以下參數
-Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking
-Xss 是指設定每個線程的堆棧大小,看一個線程大約需要占用多少內存,以及可能會有多少線程同時運行等。一般不易設置超過1M。否則容易出現out ofmemory
-XX:+AggressiveOpts 新的性能優化集成到HotSpot VM中之後,可以通過-XX:+AggressiveOpts選項來啟用。
-XX:+UseBiasedLocking 偏向鎖是為了在無多線程競爭的情況下盡量減少不必要的輕量級鎖執行路徑

2.tomcat 容器參數優化

修改文件
conf/server.xml

修改內容

 <connector port="8080" protocol="HTTP/1.1"
          URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
          acceptCount="300"  maxThreads="300" maxProcessors="1000" minProcessors="5"
          useURIValidationHack="false" compression="on" compressionMinSize="2048"
          compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
          redirectPort="8443" />

參數說明

URIEncoding
字符編碼
minSpareThreads
設當連接器第一次啟協創建線程的數目,確保至少有這麽多的空閑線程可用。默認值為4
maxSpareThreads
允許存在空閑線程的最大數目,默認值為50
enableLookups
關閉DNS查詢
disableUploadTimeout
允許Servlet容器,正在執行使用一個較長的連接超時值,以使Servlet有較長的時間來完成它的執行,默認值為false
connectionTimeout
設置連接的超時值,以毫秒為單位。默認值為60000=60秒
acceptCount
當所有的可能處理的線程都正在使用時,在隊列中排隊請求的最大數目。當隊列已滿,任何接收到的請求都會被拒絕,默認值為10
maxThreads
線程池指定Web請求負載的數量
maxProcessors minProcessors
在 Java中線程是程序運行時的路徑,是在一個程序中與其它控制線程無關的、能夠獨立運行的代碼段。它們共享相同的地址空間。多線程幫助程序員寫出CPU最 大利用率的高效程序,使空閑時間保持最低,從而接受更多的請求。
useURIValidationHack
減少對一些url的不必要的檢查從而減省開銷。
compression
打開壓縮功能
compressionMinSize
啟用壓縮的輸出內容大小,默認為2KB
compressableMimeType

沒試過下面參數

壓縮類型
noCompressionUserAgents="gozilla, traviata" 對於以下的瀏覽器,不啟用壓縮
**不要忘了把8443端口的地方也加上同樣的配置,因為如果我們走https協議的話,我們將會用到8443端口這個段的配置。

tomcat高性能參數設置