Tomcat性能優化

目錄html

  1. 增長JVM堆內存大小
  2. 修復JRE內存泄漏
  3. 線程池設置
  4. 壓縮
  5. 數據庫性能調優
  6. Tomcat本地庫
  7. 其它選項

 

第一步  – 提升JVM棧內存(Increase JVM heap memory)java

你使用過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-8web

-server -Xms1024m -Xmx1024m數據庫

-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512mapache

-XX:MaxPermSize=512m -XX:+DisableExplicitGC"瀏覽器

 

-Xms – 指定初始化時化的棧內存
-Xmx – 指定最大棧內存
在重啓你的Tomcat服務器以後,這些配置的更改纔會有效。下面將介紹如何處理JRE內存泄漏.緩存

 

第二步 – 解決JRE內存泄露tomcat

性能表現不佳的另外一個主要緣由是內存泄漏,正如我以前說過:始終使用最新的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) 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像以下設置中完成,

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

這些選項是:

    • 開啓瀏覽器的緩存,這樣讀取存放在webapps文件夾裏的靜態內容會更快,大大推進總體性能。
    • 每當開機時,Tomcat服務器應當自動地重啓。
    • 通常狀況下HTTPS請求會比HTTP請求慢。若是你想要更好的安全性,即便慢一點咱們仍是要選擇HTTPS。

 

PS:歡迎關注本人公衆號:Devin說。會有最新最及時的技術文檔推薦。

相關文章
相關標籤/搜索