天天看點

tomcat 性能優化

tomcat預設參數是為開發環境制定,而非适合生産環境,尤其是記憶體和線程的配置,預設都很低,容易成為性能瓶頸。

linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入

windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入

最大堆記憶體是1024m,對于現在的硬體還是偏低,實施時,還是按照機器具體硬體配置優化。

maxThreads="600"       ///最大線程數

minSpareThreads="100"///初始化時建立的線程數

maxSpareThreads="500"///一旦建立的線程超過這個值,Tomcat就會關閉不再需要的socket線程。

acceptCount="700"//指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求将不予處理

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

由于tomcat有多個connector,是以tomcat線程的配置,又支援多個connector共享一個線程池。

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

最大線程500(一般伺服器足以),最小空閑線程數20,線程最大空閑時間60秒。

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

可以多個connector公用1個線程池,是以ajp connector也同樣可以設定使用tomcatThreadPool線程池。

當web應用程式向要記錄用戶端的資訊時,它也會記錄用戶端的IP位址或者通過域名伺服器查找機器名 轉換為IP位址。

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

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

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

conf\web.xml中通過參數指定:

  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是非常必要的。

本文轉自奔跑在路上部落格51CTO部落格,原文連結http://blog.51cto.com/qiangsh/1836223如需轉載請自行聯系原作者

qianghong000