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,在前面加入
setJAVA_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"http:///初始化時創建的線程數
maxSpareThreads="500"http:///一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。
acceptCount="700"http://指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
這里是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地址
Apr插件提高Tomcat性能
Tomcat可以使用APR來提供超強的可伸縮性和性能,更好地集成本地服務器技術.
APR(ApachePortable Runtime)是一個高可移植庫,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括訪問高級IO功能(例如sendfile,epoll和OpenSSL),OS級別功能(隨機數生成,系統狀態等等),本地進程管理(共享內存,NT管道和UNIXsockets)。這些功能可以使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
Tomcat性能優化方案整理
考慮一下這種場景,你開發了一個應用,它有十分優秀的布局設計,最新的特性以及其它的優秀特點。但是在性能這方面欠缺,不管這個應用如何都會遭到客戶拒絕。客戶總是期望它們的應用應該有更好的性能。如果你在產品中使用了Tomcat服務器,那么這篇文章就會給你幾方面來提升Tomcat服務器的性能。感謝ITWorld1. article給本文提供資源。經過沉思我已經知道了和早期版本相比最新的Tomcat提供更好的性能和穩定性。所以一直使用最新的Tomcat版本。現在本文使用下面幾步來提高Tomcat服務器的性能。
1.? 增加JVM堆內存大小
2.? 修復JRE內存泄漏
3.? 線程池設置
4.? 壓縮
5.? 數據庫性能調優
6.? Tomcat本地庫
7.? 其它選項
第一步 – 提高JVM棧內存Increase JVM heap memory
你使用過tomcat的話,簡單的說就是“內存溢出”.通常情況下,這種問題出現在實際的生產環境中.產生這種問題的原因是tomcat使用較少的內存給進程,通過配置Tomcat的配置文件(Windows下的catalina.bat或Linux下的catalina.sh)可以解決這種問題.這種解決方法是通過增加JVM的棧內存實現的.也就是說,JVM通常不去調用垃圾回收器,所以服務器可以更多關注處理web請求,并要求盡快完成。要更改文件(catalina.sh)? 位于"\tomcat server folder\bin\catalina.sh",下面,給出這個文件的配置信息,
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8-server -Xms1024m -Xmx1024m-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m-XX:MaxPermSize=512m -XX:+DisableExplicitGC"
-Xms – 指定初始化時化的棧內存
-Xms – 指定初始化時化的棧內存-Xmx – 指定最大棧內存在重啟你的Tomcat服務器之后,這些配置的更改才會有效。下面將介紹如何處理JRE內存泄漏.
第二步 – 解決JRE內存泄露
性能表現不佳的另一個主要原因是內存泄漏,正如我之前說過:始終使用最新的tomcat服務器以獲得更好的性能和可伸縮性。現在,這句話變成真的。如果我們使用最新的tomcat版本6.0.26及以上就可以解決這個錯誤,因為它包含了一個監聽器來處理JRE和PermGen的內存泄漏。使用的監聽器是,
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
你可以在server.xml文件中找到這個監聽器的配置,server.xml位置在“tomcat project folder/conf/server.xml”。接下來,我們將看看如何調整連接屬性“maxThreads”。
第三步 – 線程池設置
線程池指定Web請求負載的數量,因此,為獲得更好的性能這部分應小心處理。可以通過調整連接器屬性“maxThreads”完成設置。maxThreads的值應該根據流量的大小,如果值過低,將有沒有足夠的線程來處理所有的請求,請求將進入等待狀態,只有當一個的處理線程釋放后才被處理;如果設置的太大,Tomcat的啟動將花費更多時間。因此它取決于我們給maxThreads設置一個正確的值。
<Connector port="8080" address="localhost"maxThreads="250" maxHttpHeaderSize="8192"emptySessionPath="true" protocol="HTTP/1.1"enableLookups="false" redirectPort="8181" acceptCount="100"connectionTimeout="20000" disableUploadTimeout="true" />
在上述配置中,maxThreads值設定為“250”,這指定可以由服務器處理的并發請求的最大數量。如果沒有指定,這個屬性的默認值為“200”。任何多出的并發請求將收到“拒絕連接”的錯誤提示,直到另一個處理請求進程被釋放。錯誤看起來如下,
org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) arecurrently busy, waiting. Increase maxThreads (250) or check the servlet status
如果應用提示上述錯誤,務必檢查上述錯誤是否是由于單個請求花費太長時間造成的,這個問題的原因是這樣的,有時候如果數據庫連接不釋放的話,進程將不會處理其它請求。
注意: 如果請求的數量超過了“750”,這將不是意味著將maxThreads屬性值設置為“750”,它意外著最好使用“Tomcat集群”的多個實例。也就是說,如果有“1000”請求,兩個Tomcat實例設置“maxThreads=? 500”,而不在單Tomcat實例的情況下設置maxThreads=1000。根據我的經驗,準確值的設定可以通過將應用在在各種環境中測試得出。接下來,我們來看看如何壓縮的MIME類型。
第4步- 壓縮
Tomcat有一個通過在server.xml配置文件中設置壓縮的選項。壓縮可以在connector像如下設置中完成,
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8181" compression="500" compressableMimeType="text/html,text/xml,text/plain,application/octet-stream" />
在前面的配置中,當文件的大小大于等于500bytes時才會壓縮。如果當文件達到了大小但是卻沒有被壓縮,那么設置屬性compression="on"。否則Tomcat默認設置是“off”。接下來我們將看看如何調優數據庫。
第五步- 數據庫性能調優
Tomcat性能在等待數據庫查詢被執行期間會降低。如今大多數應用程序都是使用可能包含“命名查詢”的關系型數據庫。如果是那樣的話,Tomcat會在啟動時默認加載命名查詢,這個可能會提升性能。另一件重要事是確保所有數據庫連接正確地關閉。給數據庫連接池設置正確值也是十分重要的。我所說的值是指Resource要素的最大空閑數(maxIdle),最大連接數(maxActive),最大建立連接等待時間(maxWait)屬性的值。因為配置依賴與應用要求,我也不能在本文指定正確的值。你可以通過調用數據庫性能測試來找到正確的值。
第6步 – Tomcat原生庫
Tomcat的原生庫基于Apache可移植運行時(Apache
? Portable?
Runtime簡稱APR),給程序員提供了超強的擴展性和性能,在產品運作中幫助融合原生的服務器技術以展現最佳的性能。想知道安裝說明的朋友請參考Tomcat
? Native Library – (APR) Installation。
第7步 – 其他選項
這些選項是:
1.? 開啟瀏覽器的緩存,這樣讀取存放在webapps文件夾里的靜態內容會更快,大大推動整體性能。
2.? 每當開機時,Tomcat服務器應當自動地重啟。
3.? 一般情況下HTTPS請求會比HTTP請求慢。如果你想要更好的安全性,即使慢一點我們還是要選擇HTTPS。
4.? 視屏詳解點擊鏈接獲取鏈接:https://pan.baidu.com/s/1vFKDFPVxnxZW-PcngjSycg