Tomcat性能調優方案(咋個辦呢 )

Tomcat性能調優方案

2013-05-09 12:42:00 發表於網易

一、操作系統調優

對於操作系統優化來說,是儘可能的增大可使用的內存容量、提高CPU的頻率,保證文件系統的讀寫速率等。經過壓力測試驗證,在併發連接很多的情況下,CPU的處理能力越強,系統運行速度越快。。
【適用場景】 任何項目。

二、Java虛擬機調優

應該選擇SUN的JVM,在滿足項目需要的前提下,儘量選用版本較高的JVM,一般來說高版本產品在速度和效率上比低版本會有改進。
JDK1.4比JDK1.3性能提高了近10%-20%,JDK1.5比JDK1.4性能提高25%-75%。
因此對性能要求較高的情況推薦使用 JDK1.6。
【適用場景】 任何項目。

三、Tomcat自身優化

1. JVM參數調優:

-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。
這兩個值的大小一般根據需要進行設置。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,並且導致應用服務崩潰。
因此一般建議堆的最大值設置爲可用內存的最大值的80%。在catalina.bat中,設置JAVA_OPTS='-Xms256m -Xmx512m',表示初始化內存爲256MB,可以使用的最大內存爲512MB。

2. 禁用DNS查詢

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

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

3. 調整線程數

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

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

在Tomcat5對這些參數進行了調整,請看下面屬性:
maxThreads Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。
acceptCount 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。
connnectionTimeout 網絡連接超時,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。通常可設置爲30000毫秒。
minSpareThreads Tomcat初始化時創建的線程數。
maxSpareThreads 一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。

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

四、APR庫使用

Tomcat中使用APR庫,其實就是在Tomcat中使用JNI的方式來讀取文件以及進行網絡傳輸。可以大大提升Tomcat對靜態文件的處理性能,同時如果你使用了HTTPS方式傳輸的話,也可以提升SSL的處理性能。
一般在Windows下,可以直接下載編譯好的二進制版本的dll庫文件來使Tomcat啓用APR,一般建議拷貝庫文件tcnative-1.dll到Tomcat的bin目錄下。而在Linux下,可以直接解壓和安裝bin目錄下的tomcat_native.tar.gz文件,編譯之前要確保apr庫已經安裝。
怎麼才能判斷Tomcat是否已經啓用了APR庫呢?方法是通過看Tomcat的啓動日誌:
如果沒有啓用APR,則啓動日誌一般有這麼一條: org.apache.coyote.http11.Http11Protocol start
如果啓用了APR,則這條日誌就會變成:
org.apache.coyote.http11.Http11AprProtocol start

tcnative-1.dll 下載地址:http://tomcat.heanet.ie/native/

五、調優綜述

根據以上分析,如果想要Tomcat達到最優的效果,首先要爭取使得操作系統以及網絡資源達到最優,並且最好使用高版本的JDK。對於有大量靜態頁面的系統,採用Apache集成Tomcat的方式,把靜態頁面交由Apache處理,動態部分交由Tomcat處理,能極大解放Tomcat的處理能力。使用ARP庫也能極大的提高Tomcat對靜態文件的處理能力。對於併發要求較高的系統,採用動靜態分離加Tomcat集羣的方式,將負載分別分擔到多個Tomcat上,能很大的提高系統的性能,充分利用硬件資源。同時需要對Tomcat自身進行優化,包括增大內存、調節併發線程數等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章