天天看點

tomcat伺服器性能,Tomcat 伺服器性能優化

簡介

考慮一下這種場景,你開發了一個應用,它有十分優秀的布局設計,最新的特性以及其它的優秀特點。但是在性能這方面欠缺,不管這個應用如何都會遭到客戶拒絕。客戶總是期望它們的應用應該有更好的性能。如果你在産品中使用了Tomcat伺服器,那麼這篇文章就會給你幾方面來提升Tomcat伺服器的性能。感謝ITWorld article給本文提供資源。經過沉思我已經知道了和早期版本相比最新的Tomcat提供更好的性能和穩定性。是以一直使用最新的Tomcat版本。現在本文使用下面幾步來提高Tomcat伺服器的性能。

增加JVM堆記憶體大小

修複JRE記憶體洩漏

線程池設定

壓縮

資料庫性能調優

Tomcat本地庫

其它選項

第一步  – 提高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",下面,給出這個檔案的配置資訊,

1

2

3

4

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 – 指定初始化時化的棧記憶體

-Xmx – 指定最大棧記憶體

在重新開機你的Tomcat伺服器之後,這些配置的更改才會有效。下面将介紹如何處理JRE記憶體洩漏.

第二步 – 解決JRE記憶體洩露

性能表現不佳的另一個主要原因是記憶體洩漏,正如我之前說過:始終使用最新的tomcat伺服器以獲得更好的性能和可伸縮性。現在,這句話變成真的。如果我們使用最新的tomcat版本6.0.26及以上就可以解決這個錯誤,因為它包含了一個監聽器來處理JRE和PermGen的記憶體洩漏。使用的監聽器是,

1

你可以在server.xml檔案中找到這個監聽器的配置,server.xml位置在“tomcat project folder/conf/server.xml”。接下來,我們将看看如何調整連接配接屬性“maxThreads”。

第三步 – 線程池設定

線程池指定Web請求負載的數量,是以,為獲得更好的性能這部分應小心處理。可以通過調整連接配接器屬性“maxThreads”完成設定。maxThreads的值應該根據流量的大小,如果值過低,将有沒有足夠的線程來處理所有的請求,請求将進入等待狀态,隻有當一個的處理線程釋放後才被處理;如果設定的太大,Tomcat的啟動将花費更多時間。是以它取決于我們給maxThreads設定一個正确的值。

1

2

3

4

5

maxThreads="250" maxHttpHeaderSize="8192"

emptySessionPath="true" protocol="HTTP/1.1"

enableLookups="false" redirectPort="8181" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

在上述配置中,maxThreads值設定為“250”,這指定可以由伺服器處理的并發請求的最大數量。如果沒有指定,這個屬性的預設值為“200”。任何多出的并發請求将收到“拒絕連接配接”的錯誤提示,直到另一個處理請求程序被釋放。錯誤看起來如下,

1

2

org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are

currently 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像如下設定中完成,

1

2

3

4

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步 – 其他選項

這些選項是:

開啟浏覽器的緩存,這樣讀取存放在webapps檔案夾裡的靜态内容會更快,大大推動整體性能。

每當開機時,Tomcat伺服器應當自動地重新開機。

一般情況下HTTPS請求會比HTTP請求慢。如果你想要更好的安全性,即使慢一點我們還是要選擇HTTPS。

就這麼多啦。在這篇文章裡,我教給了大家一些提高Tomcat伺服器性能的方法。如果你覺得這篇文章有用,或者你對提高Tomcat伺服器性能有别的看法,請不要忘記留下寶貴的評論。祝你今天程式設計愉快!