2011-10-12 47 views
1

我的Web應用程序體系結構是:Apache 2(作爲負載平衡器)+ JBoss 3.2.3 + MySQL 5.0.19。使用Mod_JK測量JBoss服務器的請求處理時間

我想:測量請求處理時間(每個單獨的請求)花費的JBoss服務器上只(即花費在網絡和數據庫服務器不計時間

我一直在研究如何登錄。 。在應用層請求處理時間只有我發現* MOD_JK日誌*,* Apache的mod_log_config *和Tomcat AccessLogValve作爲兩種可能的方法

使用* MOD_JK記錄*:我明白了mod_jk日誌記錄提供請求處理時間爲每要求計算出一個請求離開Apache服務器的時間與相應的時間之間的時間差由Apache服務器收到的積水響應。請糾正我,如果這不正確/正確。

使用Apache的mod_log_config模型(http://www.lifeenv.gov.sk/tomcat-docs/jk/config/apache.html):在LogFormat(JKLogFile構造)構造中添加「%{JK_REQUEST_DURATION} n」(參見上面的鏈接)。 「JK_REQUEST_DURATION」從Apache的角度捕獲整個Tomcat處理時間。

時間(在上述情況下)包括Tomcat/JBoss + MySQL的處理時間。因爲它包含MySQL處理時間,所以對我而言無濟於事 - 我只想在JBoss上記錄請求處理時間。任何建議/想法讚賞?

使用AccessLogValve:通過在AccessLogValve XML構造的模式屬性中設置%D,它可以記錄「處理請求的時間,以毫秒爲單位」。這是不是很清楚,如果這

  • 時間,如果這個時間是服務於 請求被Tomcat/JBoss的所需要的時間(例如,分配線程工人來處理它)採取
  • 時間來處理請求和它發送到數據庫服務器 (總時間的Tomcat/JBoss服務器上)
  • 處理被Tomcat/JBoss的請求和發送響應 回Web服務器/客戶端

任何想法/拍攝時間線索?

這是我的經驗/研究我想分享。如果任何人有類似的問題/知道一種方式來分享他們的經驗/指針/想法,可以找到更好的解決方案,將不勝感激。

期待您的想法/建議

回答

0

爲什麼要排除數據庫時間?在數據庫上花費的時間是您的應用程序正在等待的時間,正如它可能正在等待其他資源(例如lucene索引完成,遠程http請求完成等)。

如果您確實想排除db訪問時間需要用定時器啓動/停止指令來測試你的應用程序。這將確定需要進入你的應用程序(通過AOP「乾淨地」或者通過應用程序中關鍵點的啓動/停止語句手動執行),而不能簡單地作爲外部配置(例如apache模塊)。

因此,當您在處理鏈開始時收到請求(過濾器在此處運行良好)並在每次發送查詢時停止時,都需要啓動計時器。然後在查詢後再次開始。這當然不能100%完成,特別是在使用透明ORM(如休眠)的情況下。這是因爲有時您可能間接執行查詢,即在通過純Java訪問集合或關聯時。

+0

感謝Cherouvim你的有趣點 –

+0

感謝Cherouvim你的有趣點。排除數據庫時間將有助於確定瓶頸在哪裏;在應用程序服務器或數據庫服務器上。大多數情況下,數據庫的時間不會被排除,但這是我正在運行的應用程序的一個特例。您所描述的方式是我想到的,但我期望會有相當大的性能開銷。我甚至正在尋找現有的工具/服務器配置,這種測量自然而然地進行。我不想更改應用程序或服務器代碼..所以應該有一個插件左右 –

0

我認爲你正在尋找的分析工具,如Java的VisualVM,JProfiler的或其他..

相關問題