Tomcat性能調優

開篇介紹

你們好,我是Java最全面試題庫的提褲姐,今天這篇是分佈式技術的第六篇,主要介紹Tomcat性能調優;在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。程序員

怎樣給 tomcat調優

1.JVM參數調優
-Xms<size>示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。
這兩個值的大小通常根據須要進行設置。當應用程序須要的內存超出堆的最大值時虛擬機就會提示內存溢出,而且致使應用服務崩潰。所以通常建議堆的最大值設置爲可用內存的最大值的80%。
catalina.bat中,設置JAVA_OPTS='-Xms256m-Xmx512m',表示初始化內存爲256MB,可使用的最大內存爲512MBweb

2.禁用DNS查詢
當web應用程序向要記錄客戶端的信息時,它也會記錄客戶端的P地址或者經過域名服務器查找機器名轉換爲P地址。DNS查詢須要佔用網絡,而且包括可能從不少很遠的服務器或者不起做用的服務器上去獲取對應的P的過程,這樣會消耗必定的時間。
爲了消除DNS查詢對性能的影響咱們能夠關閉DNS查詢,方式是修改 server.xml文件 enableLookups中的參數值:面試

Tomcat4
    <Connector
            className="org.apache.coyote.tomcat4.CoyoteConnector" port="80"
            minProcessors="5" maxProcessors="75" enableLookups="false"
            redire ctPort="8443"
            acceptCount="100" debug="0" connectionTimeout="20000"
            useURIValidationHack="false" disableUploadTimeout="true"/>
Tomcat5
    <Connectorport="80"maxThreads="150"minSpareThreads="25"
    maxSpareThreads="75"enableLookups="false"redirectPort="8443"
    acceptCount="100"debug="0"connectionTimeout="20000"
    disableUploadTimeout="true"/>

3.調整線程數
經過應用程序的鏈接器(Connector)進行性能控制的的參數是建立的處理請求的線程數。Tomcat使用線程池加速響應速度來處理請求。在Java中線程是程序運行時的路徑,是在一個程序中與其它控制線程無關的、可以獨立運行的代碼段。它們共享相同的地址空間。多線程幫助程序員寫出CPU最大利用率的高效程序,使空閒時間保持最低,從而接更多的請求。apache

Tomcat4中能夠經過修改minProcessorsmaxProcessors的值來控制線程數。這些值在安裝後就已經設定爲默認值而且是足夠使用的,可是隨着站點的擴容而改大這些值。 minProcessors服務器啓動時建立的處理請求的線程數應該足夠處理一個小量的負載。也就是說,若是一天內每秒僅發生5次單擊事件,而且每一個請求任務處理須要1秒鐘,那麼預先設置線程數爲5就足夠了。但在你的站點訪問量較大時就須要設置更大的線程數,指定爲參數 maxProcessors的值。 maxProcessors的值也是有上限的,應防止流量不可控制(或者惡意的服務攻擊),從而致使超出了虛擬機使用內存的大小。若是要加大併發鏈接數,應同時加大這兩個參數。 web server容許的最大鏈接數還受制於操做系統的內核參數設置,一般 Windows是2000個左右, Linux是1000個左右.
在 Tomcat5對這些參數進行了調整,屬性:tomcat

  • maxThreads Tomcat使用線程來處理接收的每一個請求。這個值表示 Tomcat可建立的最大的線程數。
  • acceptCount指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理。
  • connnection Timeout網絡鏈接超時,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。一般可設置爲30000毫秒。
  • minSpareThreadsTomcat初始化時建立的線程數
  • maxSpareThreads一旦建立的線程超過這個值, Tomcat就會關閉再也不須要的 socket線程。

最好的方式是多設置幾回而且進行測試,觀察響應時間和內存使用狀況。
在不一樣的機器、操做系統或虛擬機組合的狀況下可能會不一樣,並且並非全部人的web站點的流量都是同樣的,所以沒有一刀切的方案來肯定線程數的值。服務器

如何加大 Tomcat鏈接數?

在 tomcat配置文件 server.xml中的<Connector/>配置中,和鏈接數相關的參數有:
minProcessors:最小空閒鏈接線程數用於提升系統處理性能,默認值爲10
maxProcessors:最大鏈接線程數,即:併發處理的最大請求數,默認值爲75
acceptCount:容許的最大鏈接數,應大於等於 maxProcessors,默認值爲100
enableLookups:是否反查域名,取值爲:true或 false爲了提升處理能力,應設置爲 false
connectionTimeout:網絡鏈接超時,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。一般可設置爲30000毫秒。
其中和最大鏈接數相關的參數爲 maxProcessorsacce和若是要加大併發鏈接數,應同時加大這兩個參數。
web server容許的最大鏈接數還受制於操做系統的內核參數設置,一般 Windows是2000個左右, Linux是1000個左右。 tomcat5中的配置示例:網絡

<Connector port="8080"
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           redirectPort="8443"
           maxThreads="500"
           minSpareThreads="20"
           acceptCount="100"
           disableUploadTimeout="true"
           enableLookups="false"
           URIEncoding="UTF-8"/>

對於其餘端口的配置,以此類推。多線程