2015-01-16 68 views
2

在Java-web-app中搜索性能問題時,我想通過抽樣(通過抽樣)來分析單個Web會話。 Web應用程序部署在Java EE應用程序服務器(JBoss或WLS,因此沒有可能的OpenJDK特定的東西)分析單個Web會話

使用像JVisualVM或YourKit的傳統採樣器將只允許我一次剖析所有正在運行的線程因此不會顯示與已經在服務器上的基本負載分離的所述web會話的CPU使用率。部分問題是,Web會話和單個線程之間(顯然)沒有技術上的聯繫,即每個請求都可能從應用程序服務器的線程池中獲取不同的線程。

我的想法是實現一個採樣器,並在每次從服務器收到新請求時註冊與觀察到的Web會話關聯的線程(一旦請求完成,就取消註冊線程)。

第一個問題:您是否需要手動執行此操作,或者是否有可用的工具來執行此操作?

第二個問題(因爲我沒有發現,並假設這是一個相當具體的問題):什麼是最好的方法?

顯然,人們會盡量減少配置文件對應用程序性能的影響。顯然,因爲我需要將(技術)線程信息連接到特定於應用程序的數據(websession-ID),所以這看起來不算什麼,可以通過JVMTI完成。

留下了對應用程序分析器進行編碼的選項,其中一個線程正在通過Thread.stackTrace或ThreadMXBean.getThreadInfo進行採樣。哪個更好?還有其他更好的選擇嗎?

回答

3

JProfiler可以將呼叫樹拆分爲不同的URL或查詢參數。

enter image description here

如果你可以修改URL或爲目的的查詢參數,那麼你就可以在會話從背景中分離出來的負載。例如,您可以添加一個查詢參數profile=true,您只傳遞用於應該進行概要分析的請求。

enter image description here

免責聲明:我公司開發的JProfiler。