最佳化和調優 Apache Tomcat - 第二部分
幾周前,Filip Hanik 和我舉辦了最佳化和調優 Apache Tomcat 系列網路研討會的第二場。網路研討會錄影和幻燈片副本可從 SpringSource 網站的網路研討會部分獲取。同一頁面上還有所有以前的 SpringSource 網路研討會的連結,以及 Covalent 網路研討會存檔。
在問答環節中,我們未能回答所有問題,因此,按照承諾,這裡是剩餘的問題和我們的回答。
- 如何識別 Tomcat 應用程式中的記憶體洩漏?
您幾乎肯定需要使用分析器來找出記憶體洩漏的根本原因。最新的 Sun JDK 包括 jhat 和 jmap 等工具。還有許多其他分析器可用,包括免費和商業的。Filip 和我在調查 Tomcat 記憶體洩漏時使用 YourKit,因為 YourKit 為開源開發者提供免費許可證。
- 重新部署如何導致記憶體洩漏?
這通常發生在 Tomcat 載入的類保留了對 Web 應用程式載入的類的引用時。當 Web 應用程式停止時,Tomcat 類載入器繼續保留對 Web 應用程式載入的類的引用。這個類保留了對 Web 應用程式的類載入器的引用,而 Web 應用程式的類載入器又保留了它載入的所有類的引用。因此,Web 應用程式的類載入器及其載入的所有類都不符合垃圾回收條件。這會導致記憶體洩漏。典型的根本原因是 JDBC 驅動程式和日誌框架。
- 更改 Tomcat 使用的 JVM 的最佳方法是什麼?
要使用的 JVM 是透過 JAVA_HOME(完整 JDK)或 JRE_HOME(僅 JRE)環境變數設定的。設定此項的正確位置取決於您的環境,特別是如果 Tomcat 配置為在系統啟動時自動啟動。如果您可以自由選擇設定位置,請根據您的作業系統使用 setenv.bat 或 setenv.sh。
- 您推薦特定的 JVM 嗎?
不,我們不推薦。您選擇的 JVM 供應商取決於您的作業系統。
- 我應該使用哪個聯結器來連線 Apache httpd 和 Tomcat?
我們推薦 mod_proxy_http,mod_jk 緊隨其後。通常,mod_proxy_ajp 不如 mod_proxy_http 或 mod_jk 穩定。請注意,mod_jk2 已被棄用,不應再使用。
- 使用 SSL 時,maxKeepAliveRequests 的正確設定是什麼?
使用 SSL 時應啟用 HTTP keep alive,因為 SSL 握手對於每個請求來說都是一項相對昂貴的操作。
- 如果我們在 Solaris 上執行 Tomcat,您是否不推薦使用原生 APR 聯結器?
是的,我們不推薦。我們從客戶那裡收到的反饋是 APR 聯結器在 Solaris 上不穩定。
- 我們之前嘗試在 Solaris 上遷移到 mod_proxy_http,但遇到了幾個 bug。這些 bug 解決了嗎?
在不知道您使用的確切 bug 或版本的情況下,很難評論。所有已知的 Apache httpd 問題和當前狀態都可以在 ASF Bugzilla 資料庫中找到。Tomcat 問題也可以在 Bugzilla 中找到。
- 對於預設的阻塞 IO HTTP 聯結器,maxKeepAliveRequests 應該使用什麼值?
對於高併發環境,將其設定為 1。否則,將其設定為頁面上物件的平均數量,範圍在 10 到 100 之間。
- 如何配置 JkOptions +DisableReuse?
JkOptions +DisableReuse 應放在 httpd.conf 檔案中,與其他 mod_jk 設定一起。
- 何時最適合使用非阻塞 IO HTTP 聯結器?
當您需要支援帶 keep alive 的高併發且 APR 不是一個選項時,例如因為它在您的平臺上不穩定。
- 如果我在 Apache Tomcat 前面使用 Apache httpd,效能會更好嗎?
這取決於情況。如果您將所有請求代理到 Tomcat,則效能會略有下降。如果 httpd 處理部分請求(例如所有靜態內容),則您可能會看到一些好處。有一些基準測試試圖證明某個聯結器優於其他聯結器。但是,這些基準測試中的任何一個很可能都不能代表您的應用程式。唯一確定的方法是在您的環境中使用真實的負載和使用模式進行測試。
- Tomcat 可以在沒有前端 Web 伺服器的情況下用於生產環境嗎?
是的。這是否能為您的環境提供最佳效能取決於該環境和您的應用程式。與前一個問題一樣,唯一確定的方法是在您的環境中使用真實的負載和使用模式進行測試。
- 在 Tomcat 前面使用 Apache httpd 會增加安全性嗎?
您的安裝安全性取決於許多因素。是否使用 Apache httpd 不太可能顯著改變您的安裝安全性。其他因素,例如及時更新補丁和使用防火牆,通常對您的整體安全級別有更大的影響。
- 哪種 Apache httpd MPM 提供最佳效能?
和往常一樣,這將取決於您的環境,但 httpd 效能調優文件提供了一些有用的通用指導。
- SpringSource ERS 和 Apache Tomcat 之間的效能差異是什麼?
SpringSource ERS 不僅僅是 Apache Tomcat。從純粹的 Tomcat 角度來看,效能不是區別因素。ERS 的優勢在於安裝簡單、升級和打補丁易於管理、支援多個例項以及所有元件的整合。
- 我的公司使用 Tomcat 和 XYZ 應用程式伺服器。Tomcat 與 XYZ 應用程式伺服器相比如何?整合是否有好處?
兩者的會很多差異,而重要的差異會因組織而異。首先確定您希望從應用程式伺服器中獲得什麼,然後將該列表與市場進行比較。整合是有好處的。更高的一致性意味著更簡單的維護、更少的培訓等。但是,也有成本。您需要審視您的組織以及它計劃如何進行整合(僅限新專案、下一個主要版本的所有專案、現在全部整合等),以便將成本與相關收益進行比較。
- 您是否有 Tomcat 和 XYZ 應用程式伺服器的效能比較可用?
在這方面已經發表了各種報告。結果的有用性取決於測試與您的負載匹配得有多好。和往常一樣,唯一確定的方法是在您的環境中使用真實的負載和使用模式進行測試。
- 對 Tomcat 伺服器進行負載測試的好方法是什麼?
- 為了高可用性和效能,可以將 Tomcat 配置為為同一個 Web 應用程式啟動多個 JVM 嗎?
Tomcat 不提供此配置選項。當然,您可以建立多個 Tomcat 例項,在每個例項上安裝您的應用程式,然後跨這些例項進行負載均衡。
- 是否有適用於 Tomcat 的通用健康檢查指令碼?
的 Manager 狀態頁面可能是個不錯的起點。如果需要,您可以使用該 Servlet 的程式碼作為基礎來構建您自己更具體/更全面的檢查。如果您對其進行了增強,請考慮將您的增強貢獻回 Apache Tomcat 社群。
- logging.properties 檔案位於何處?
預設位置是 $CATALINA_BASE/conf。