tomcat性能優化

tomcat默認參數是爲開發環境制定,而非適合生產環境,尤其是內存和線程的配置,默認都很低,容易成爲性能瓶頸。



tomcat內存優化
linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入

JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"
windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入

set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m
最大堆內存是1024m,對於現在的硬件還是偏低,實施時,還是按照機器具體硬件配置優化。



tomcat 線程優化
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"
connectionTimeout="20000" redirectPort="8443" />
maxThreads="600"       ///最大線程數
minSpareThreads="100"///初始化時創建的線程數
maxSpareThreads="500"///一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。
acceptCount="700"//指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理



這裏是http connector的優化,如果使用apache和tomcat做集羣的負載均衡,並且使用ajp協議做apache和tomcat的協議轉發,那麼還需要優化ajp connector。

<Connector port="8009" protocol="AJP/1.3" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"
connectionTimeout="20000" redirectPort="8443" />


由於tomcat有多個connector,所以tomcat線程的配置,又支持多個connector共享一個線程池。

首先。打開/conf/server.xml,增加

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />
最大線程500(一般服務器足以),最小空閒線程數20,線程最大空閒時間60秒。



然後,修改<Connector ...>節點,增加executor屬性,executor設置爲線程池的名字:

<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1"  connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1"  redirectPort="443" />
可以多個connector公用1個線程池,所以ajp connector也同樣可以設置使用tomcatThreadPool線程池。



禁用DNS查詢

當web應用程序向要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者通過域名服務器查找機器名 轉換爲IP地址。

DNS查詢需要佔用網絡,並且包括可能從很多很遠的服務器或者不起作用的服務器上去獲取對應的IP的過程,這樣會消耗一定的時間。

修改server.xml文件中的Connector元素,修改屬性enableLookups參數值: enableLookups="false"

如果爲true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若爲false則不進行DNS查詢,而是返回其ip地址





設置session過期時間
conf\web.xml中通過參數指定:

    <session-config>   
        <session-timeout>180</session-timeout>     
    </session-config> 
單位爲分鐘。


Apr插件提高Tomcat性能
  Tomcat可以使用APR來提供超強的可伸縮性和性能,更好地集成本地服務器技術.

  APR(Apache Portable Runtime)是一個高可移植庫,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括訪問高級IO功能(例如sendfile,epoll和OpenSSL),OS級別功能(隨機數生成,系統狀態等等),本地進程管理(共享內存,NT管道和UNIX sockets)。這些功能可以使Tomcat作爲一個通常的前臺WEB服務器,能更好地和其它本地web技術集成,總體上讓Java更有效率作爲一個高性能web服務器平臺而不是簡單作爲後臺容器。

  在產品環境中,特別是直接使用Tomcat做WEB服務器的時候,應該使用Tomcat Native來提高其性能  

  要測APR給tomcat帶來的好處最好的方法是在慢速網絡上(模擬Internet),將Tomcat線程數開到300以上的水平,然後模擬一大堆併發請求。
  如果不配APR,基本上300個線程狠快就會用滿,以後的請求就只好等待。但是配上APR之後,併發的線程數量明顯下降,從原來的300可能會馬上下降到只有幾十,新的請求會毫無阻塞的進來。
  在局域網環境測,就算是400個併發,也是一瞬間就處理/傳輸完畢,但是在真實的Internet環境下,頁面處理時間只佔0.1%都不到,絕大部分時間都用來頁面傳輸。如果不用APR,一個線程同一時間只能處理一個用戶,勢必會造成阻塞。所以生產環境下用apr是非常必要的。

複製代碼
(1)安裝APR tomcat-native
    apr-1.3.8.tar.gz   安裝在/usr/local/apr
    #tar zxvf apr-1.3.8.tar.gz
    #cd apr-1.3.8
    #./configure;make;make install

    apr-util-1.3.9.tar.gz  安裝在/usr/local/apr/lib
    #tar zxvf apr-util-1.3.9.tar.gz
    #cd apr-util-1.3.9  
    #./configure --with-apr=/usr/local/apr ----with-java-home=JDK;make;make install

    #cd apache-tomcat-6.0.20/bin  
    #tar zxvf tomcat-native.tar.gz  
    #cd tomcat-native/jni/native  
    #./configure --with-apr=/usr/local/apr;make;make install

  (2)設置 Tomcat 整合 APR
    修改 tomcat 的啓動 shell (startup.sh),在該文件中加入啓動參數:
      CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib" 。

  (3)判斷安裝成功:
    如果看到下面的啓動日誌,表示成功。
      2007-4-26 15:34:32 org.apache.coyote.http11.Http11AprProtocol init
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章