最佳化和調優 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 應用程式類載入器及其載入的所有類都不符合垃圾回收的條件。這導致了記憶體洩漏。典型的根本原因是 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 應與您的其他 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 伺服器的好方法是什麼?

    有幾種可用的工具可以進行負載驅動測試,包括免費和商業工具。免費工具包括 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 社群所有即將到來的活動。

檢視全部