最佳化和調整 Apache Tomcat - 第 2 部分

工程 | Mark Thomas | 2008年10月14日 | ...

幾周前,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,但遇到了幾個錯誤。這些錯誤是否已解決?

    在不知道確切的錯誤或您使用的版本的情況下,很難發表評論。所有已知的 Apache httpd 問題和當前狀態都可以在 ASF Bugzilla 資料庫中找到。Tomcat 問題也可以在 Bugzilla 中找到。

  • 對於預設的阻塞 IO HTTP 聯結器,maxKeepAliveRequests 應該使用什麼值?

    對於高併發環境,將其設定為 1。否則,將其設定為您頁面上的平均物件數,介於 10 到 100 之間。

  • 如何配置 JkOptions +DisableReuse?

    JkOptions +DisableReuse 應放置在您的 httpd.conf 檔案中,與其他 mod_jk 設定一起。

  • 何時最適合使用非阻塞 IO HTTP 聯結器?

    當您需要支援高併發且保持活動狀態,並且 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 伺服器的好方法是什麼?

    有多種工具可用於驅動負載,包括免費和商業的。免費工具包括 abJMeter

  • 為了高可用性和效能,Tomcat 可以配置為為同一個 Web 應用程式啟動多個 JVM 嗎?

    Tomcat 不提供此配置選項。當然,您可以建立多個 Tomcat 例項,在每個例項上安裝您的應用程式,然後跨例項進行負載均衡。

  • 有通用的 Tomcat 健康檢查指令碼嗎?

    管理器狀態頁面可能是一個很好的起點。如果需要,您可以使用該 Servlet 的程式碼作為您自己更具體/更廣泛檢查的基礎。如果您確實進行了增強,請考慮將您的增強貢獻回 Apache Tomcat 社群。

  • logging.properties 檔案位於何處?

    預設位置是 $CATALINA_BASE/conf。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有