目錄html
第一步 – 提升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步 – 其餘選項
這些選項是:
PS:歡迎關注本人公衆號:Devin說。會有最新最及時的技術文檔推薦。