最佳化與調整 Apache Tomcat - 第二部分
幾週前,Filip Hanik 和我進行了關於最佳化與調整 Apache Tomcat 系列網路研討會的第二場。研討會的錄影和投影片副本可以從 SpringSource 網站的 網路研討會專區 取得。同一個頁面也提供先前所有 SpringSource 網路研討會,以及 Covalent 網路研討會檔案的連結。
我們無法在問答環節回答所有的問題,所以按照承諾,這裡提供剩餘的問題和我們的答案。
- 如何識別 Tomcat 應用程式中的記憶體洩漏?
您幾乎肯定需要使用分析器來識別記憶體洩漏的根本原因。最新的 Sun JDK 包含 jhat 和 jmap 等工具。還有許多其他分析器可用,包括免費和商業版本。在調查 Tomcat 記憶體洩漏時,Filip 和我使用 YourKit,因為 YourKit 為開源開發人員提供免費授權。
- 重新部署如何導致記憶體洩漏?
當 Tomcat 載入的類別保留對 Web 應用程式載入的類別的引用時,通常會發生這種情況。當 Web 應用程式停止時,Tomcat 類別載入器會繼續保留對 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,但遇到了一些錯誤。這些錯誤是否已解決?
如果不了解確切的錯誤或您使用的版本,很難發表評論。所有已知的 Apache httpd 問題和目前狀態都可以在 ASF Bugzilla 資料庫中找到。Tomcat 問題也可以在 Bugzilla 中找到。
- 使用預設的阻塞 IO HTTP 連接器時,我應該為 maxKeepAliveRequests 使用什麼值?
對於高並發環境,將其設定為 1。否則,將其設定為您在頁面上擁有的物件平均數量,介於 10 到 100 之間。
- 如何配置 JkOptions +DisableReuse?
JkOptions +DisableReuse 應與其他 mod_jk 設定一起放置在您的 httpd.conf 檔案中。
- 何時最好使用非阻塞 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 的通用健康檢查腳本?
管理員狀態頁面可能是一個好的起點。如果需要,您可以使用該 Servlet 的程式碼作為您自己的、更具體/廣泛的檢查的基礎。如果您確實增強了它,請考慮將您的增強功能貢獻回 Apache Tomcat 社群。
- logging.properties 檔案位於何處?
預設位置在 $CATALINA_BASE/conf 中。