Mark Thomas

校友
部落格文章作者:Mark Thomas

最佳化與調整 Apache Tomcat - 第二部分

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

幾週前,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 伺服器的好方法是什麼?

    有幾個選項可用,包括驅動負載的工具,包括免費和商業工具。免費工具包括 abJMeter

  • 對於高可用性和效能,是否可以將 Tomcat 配置為為同一個 Web 應用程式啟動多個 JVM?

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

  • 是否有用於 Tomcat 的通用健康檢查腳本?

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

  • logging.properties 檔案位於何處?

    預設位置在 $CATALINA_BASE/conf 中。

最佳化和調整 Apache Tomcat

工程 | 2008 年 8 月 8 日 | ...

週三,我舉辦了一場關於最佳化和調整 Apache Tomcat 的網路研討會。研討會的錄影和投影片副本可以從 SpringSource 網站的網路研討會專區 取得。同一個頁面也提供先前所有 SpringSource 網路研討會,以及 Covalent 網路研討會檔案的連結。

我無法在問答環節回答所有的問題,所以按照承諾,這裡提供剩餘的問題和我的答案。

  • 在 Apache Tomcat 上運行的 XYZ 應用程式的最佳調整實務是什麼?

    對於任何應用程式,都沒有理想的配置設定,因為最佳設定取決於許多因素。作為起點,請使用應用程式提供的建議。之後,遵循網路研討會中設定的流程,並且不要害怕違背應用程式提供的建議,如果這能為您帶來更好的效能。

  • <li><strong>Do you have any recommendations for open source tools for troubleshooting, performance benchmarking or testing web applications?</strong>
    

    我進行故障排除的起點是使用 Eclipse 建立一個簡單的測試案例。然後,我使用內建的偵錯程式逐步執行程式碼,以真正了解正在發生的事情。如果您需要分析器,那麼 NetBeans 包含一個,但我從未使用過。我使用商業分析器 (YourKit),因為它們為開源開發人員提供免費授權。對於效能基準測試,我使用 Apache JMeter,對於測試,我結合使用 JUnitApache JMeter

    <li…

領先一步

VMware 提供訓練和認證,加速您的進展。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

查看全部