Tomcat性能優化

Tomcat性能優化,主要從兩方面着手展開:javascript

  • 基於JVM的內存優化
  • Tomcat啓動行參數的優化

基於JVM的內存優化

注意:32位系統下JVM內存的限制:不能突破2GB內存,即便服務器裝有8~32G內存,但Java也只能用到2GB的內存。而64位操做系統上不管是系統內存仍是JVM都沒有此限制。css

Tomcat 啓動行參數的優化

Tomcat運行在JVM上,由於它的啓動其實也只是個java命令行,因此首先對Java的啓動命令行進行調優。html

配置啓動行參數

Tomcat的啓動參數位於Tomcat安裝目錄\bin目錄下的catalina.bat文件(Linux下爲catalina.sh文件),打開該文件後加入如下參數(通常該文件頭部是一堆的由##包裹着的註釋文字,在該註釋文字的末尾處回車換行):java

  • Linux版本
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 "
  • Windows版本
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的優勢:瀏覽器

    • 更大更高的併發處理能力
    • 更快更強進的JVM垃圾回收機制
    • 更多的負載和吞吐量
  • -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線程優化(吞吐量)

打開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等輸出的網頁也能進行壓縮,壓縮效率驚人。

  1. compression=」on」 打開壓縮功能
  2. compressionMinSize=」2048″ 啓用壓縮的輸出內容大小,這裏面默認爲2KB
  3. noCompressionUserAgents=」gozilla, traviata」 對於如下的瀏覽器,不啓用壓縮
  4. compressableMimeType=」text/html,text/xml」 壓縮類型

最後不要忘了把8443端口的地方也加上一樣的配置,由於若是咱們走https協議的話,咱們將會用到8443端口這個段的配置。

相關文章
相關標籤/搜索