Tomcat性能優化,主要從兩方面着手展開:javascript
注意:32位系統下JVM內存的限制:不能突破2GB內存,即便服務器裝有8~32G內存,但Java也只能用到2GB的內存。而64位操做系統上不管是系統內存仍是JVM都沒有此限制。css
Tomcat運行在JVM上,由於它的啓動其實也只是個java命令行,因此首先對Java的啓動命令行進行調優。html
Tomcat的啓動參數位於Tomcat安裝目錄\bin目錄下的catalina.bat文件(Linux下爲catalina.sh文件),打開該文件後加入如下參數(通常該文件頭部是一堆的由##包裹着的註釋文字,在該註釋文字的末尾處回車換行):java
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "
set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true
-server,生產環境下必須加上此參數。默認狀況下,Tomcat以java -client的模式來運行,server意味着Tomcat以真實的production的模式運行,也就是說server模式下,Tomcat的優勢:瀏覽器
-Xms、-Xmx 設置JVM內存,把兩個設置爲同樣是最優的作法。 一個系統隨着併發數愈來愈高,它的內存使用狀況逐步上升,上升到最高點不能上升了,開始回落。內存回落時(尤爲大起大落),付出的代價是CPU高速開始運轉進行垃圾回收,此時嚴重狀況下甚至會形成系統出現「卡殼」(操做時網頁中止幾秒甚至十幾秒),由於JVM 正在進行垃圾回收。所以一開始就把這兩個設置同樣的數值,使得Tomcat在啓動時就爲最大化參數,充分利用系統的效率。性能優化
-Xmn 設置年輕代大小。整個堆大小=年輕代 + 年老代 + 持久代。持久代通常固定大小爲64M服務器
-Xss 設定每一個線程的棧大小網絡
-XX:PermSize=128M -XX:MaxPermSize=256M JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64; 由-XX:MaxPermSize設置最大非堆內存大小,默認是物理內存的1/4;併發
打開Tomcat目錄下/conf/server.xml文件,並定位到<Connector />這一行:less
<Connector port=」8080″ protocol=」HTTP/1.1″ 。。。 />
<Connector />爲Tomcat容器性能參數設置的地方。下面爲修改後的設置:
<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="UTF-8" 使得Tomcat能夠解析含有中文的URL
maxSpareThreads
minSpareThreads 最小備用線程數,Tomcat啓動時的初始化線程數
enableLookups 是否啓用域名解析,通常設爲false(關閉)
connectingTimeout 網絡鏈接超時毫秒數
maxThreads Tomcat使用線程處理接收的每一個請求。這個值表示Tomcat可建立的最大線程數
acceptCount 當線程數達maxThreads後,後續請求會被放入一個等待隊列,acceptCount是這個隊列的大小,若是這個隊列也滿了後,就直接refuse connection。默認值100。
gzip壓縮功能
compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
HTTP 壓縮能夠大大提升瀏覽網站的速度,它的原理是,在客戶端請求網頁後,從服務器端將網頁文件壓縮,再下載到客戶端,由客戶端的瀏覽器負責解壓縮並瀏覽。相對於普通的瀏覽過程HTML,CSS,Javascript , Text ,它能夠節省40%左右的流量。更爲重要的是,它能夠對動態生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率驚人。
最後不要忘了把8443端口的地方也加上一樣的配置,由於若是咱們走https協議的話,咱們將會用到8443端口這個段的配置。