Tomcat 生產伺服器效能優化
試想以下這個情景:你已經開發好了一個程式,這個程式的排版很不錯,而且有著最前沿的功能和其他一些讓你這程式增添不少色彩的元素。可惜的是,程式的效能不怎麼地。你也十分清楚,若現在把這款產品退出市場,肯定會給客戶罵得狗血淋頭。因為不管樣子多麼好看,效能才是客戶們最需要的。如果你在軟體實際執行中使用了Tomcat伺服器,那麼這篇文章將能讓你學到一些能提高Tomcat伺服器效能的方法。在此我先得感謝 ITWorld article提供的資源。我仔細地衡量了一下,覺得最新版的Tomcat和之前的版本相比,在效能跟穩定性都有所提高,所以大家都去用最新版吧。在這篇文章裡分以下的七個步驟,按照這些步驟走,Tomcat伺服器的效能就能改善哦。
- 增加JVM堆(heap)
- 解決記憶體洩漏問題
- 執行緒池(thread pool)的設定
- 壓縮
- 調節資料庫效能
- Tomcat原生庫(native library)
- 其他選項
第一步 – 提高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 – 指定初始化時化的棧記憶體
-Xmx – 指定最大棧記憶體
在重啟你的Tomcat伺服器之後,這些配置的更改才會有效。下面將介紹如何處理JRE記憶體洩漏.
第二步 - 解決JRE記憶體洩漏
另一個影響Tomcat 效能的因素是記憶體洩露,就像我前面提及的,可以通過更新到最新版本的Tomcat來獲得較好效能和可擴充套件性.現在這句話將成為事實。如果我們使用最新的 tomcat 伺服器版本6.0.26 或更高版本,可以解決此類錯誤。因為它包含一個監聽器來處理 JRE 和 permgen 記憶體洩漏。這裡使用的監聽器是,
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
你可以找到上述監聽器類配置檔案 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型別。
第四步- 壓縮
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" />
第五步- 資料庫效能調優
Tomcat效能在等待資料庫查詢被執行期間會降低。如今大多數應用程式都是使用可能包含“命名查詢”的關係型資料庫。如果是那樣的話,Tomcat會在啟動時預設載入命名查詢,這個可能會提升效能。另一件重要事是確保所有資料庫連線正確地關閉。給資料庫連線池設定正確值也是十分重要的。我所說的值是指Resource要素的最大空閒數(maxIdle),最大連線數(maxActive),最大建立連線等待時間(maxWait)屬性的值。因為配置依賴與應用要求,我也不能在本文指定正確的值。你可以通過呼叫資料庫效能測試來找到正確的值。
第六步 – Tomcat原生庫
Tomcat的原生庫基於Apache可移植執行時(Apache Portable Runtime簡稱APR),給程式設計師提供了超強的擴充套件性和效能,在產品運作中幫助融合原生的伺服器技術以展現最佳的效能。想知道安裝說明的朋友請參考Tomcat Native Library – (APR) Installation。
第七步 – 其他選項
這些選項是:
- 開啟瀏覽器的快取,這樣讀取存放在webapps資料夾裡的靜態內容會更快,大大推動整體效能。
- 每當開機時,Tomcat伺服器應當自動地重啟。
- 一般情況下HTTPS請求會比HTTP請求慢。如果你想要更好的安全性,即使慢一點我們還是要選擇HTTPS。
就這麼多啦。在這篇文章裡,我教給了大家一些提高Tomcat伺服器效能的方法。如果你覺得這篇文章有用,或者你對提高Tomcat伺服器效能有別的看法,請不要忘記留下寶貴的評論。祝你今天程式設計愉快!
相關文章
- 效能優化|Tomcat 服務優化優化Tomcat
- tomcat 部署效能優化Tomcat優化
- 淺談Tomcat伺服器優化方法Tomcat伺服器優化
- Eureka:生產環境優化總結。優化
- 貼合生產的MySql優化思路MySql優化
- 提高網站訪問效能之Tomcat優化網站Tomcat優化
- linux生產伺服器有關網路狀態的優化措施Linux伺服器優化
- 【前端效能優化】vue效能優化前端優化Vue
- IIS網站伺服器效能優化攻略網站伺服器優化
- 一次生產的 JVM 優化案例JVM優化
- Spark 優化GroupByKey產生RDD[(K, Iterable[V])]Spark優化
- 一次生產事故的優化經歷優化
- 效能優化優化
- Tomcat常用優化配置Tomcat優化
- Tomcat部署及優化Tomcat優化
- 效能優化案例-SQL優化優化SQL
- 系統優化怎麼做-Tomcat優化優化Tomcat
- 【效能優化】ORACLE資料庫效能優化概述優化Oracle資料庫
- Kafka生產消費資料丟失和優化小結Kafka優化
- Vue 移動端專案生產環境的優化Vue優化
- 前端效能優化(JS/CSS優化,SEO優化)前端優化JSCSS
- Tomcat高階特性及效能調優Tomcat
- oracle優化之生產系統不改程式碼解決SQL效能問題的幾種方法Oracle優化SQL
- Android效能優化----卡頓優化Android優化
- 前端效能優化 --- 圖片優化前端優化
- [效能優化]DateFormatter深度優化探索優化ORM
- MySQL 效能優化之索引優化MySql優化索引
- Web效能優化:圖片優化Web優化
- MySQL 效能優化之SQL優化MySql優化
- Android效能優化篇之計算效能優化Android優化
- Tomcat安裝與優化Tomcat優化
- mysql效能優化MySql優化
- Redis 效能優化Redis優化
- 效能優化有感優化
- react效能優化React優化
- javascript效能優化JavaScript優化
- Javascript 效能優化JavaScript優化
- php效能優化PHP優化