1. 程式人生 > >【開發工具】JAVA效能分析:2、超詳細的JProfiler資料分析(官方中文版)

【開發工具】JAVA效能分析:2、超詳細的JProfiler資料分析(官方中文版)

此頁是根據官方的英文版進行的對照翻譯。重要資訊用紅色加粗進行了標記。

Recording Data——記錄資料

一、Scalar values and telemetries

         從分析器的角度來看,最不成問題的資料形式是標量值,例如活動執行緒數或開啟JDBC連線數。JProfiler可以用固定的巨集觀頻率(通常每秒一次)對這些值進行取樣,並向您展示隨時間的演變。在JProfiler中,顯示此類資料的檢視稱為遙測。由於測量開銷和記憶體消耗很小,因此大多數遙測都會被記錄下來。如果長時間記錄資料,則會合並較舊的資料點,以便記憶體消耗不會隨時間線性增長。

還有引數化遙測,例如每個類的例項數。額外的維度使永久的時間順序記錄不可持續。您可以告訴JProfiler記錄多個選定類的例項計數的遙測,但不記錄每個類的例項計數。

要繼續前面的示例,JProfiler能夠顯示所有類的例項計數,但沒有按時間順序排列的資訊。這是“所有物件”檢視,它將每個類顯示為表中的一行。更新檢視的頻率低於每秒​​一次,並且可以根據測量引起的開銷自動調整。確定所有類的例項計數相對昂貴,並且堆上的物件越多,所需的時間就越長。JProfiler限制“所有物件”檢視的更新頻率,以便在極端情況下測量的開銷不會超過10%。您可以凍結檢視以暫時停止錄製。此外,如果檢視未啟用,

一些測量捕獲類似列舉的值,例如執行緒當前所處的執行狀態。這種測量可以顯示為彩色時間線,並且比數字遙測消耗更少的記憶體。線上程狀態的情況下,“執行緒歷史記錄”檢視顯示JVM中所有執行緒的時間線。就像具有數值的遙測資料一樣,舊的值被合併並變得更粗粒度以減少記憶體消耗。

二、Allocation recording

如果您對在特定時間間隔內分配的例項計數感興趣,則JProfiler必須跟蹤所有分配。與“所有物件”檢視相反,JProfiler可以迭代堆中的所有物件以獲取按需資訊,跟蹤單個分配要求必須為每個物件分配執行其他程式碼。這使得它成為一種非常昂貴的測量,可以顯著改變配置應用程式的執行時特性,例如效能熱點,尤其是在分配許多物件時。這就是必須明確啟動和停止分配記錄的原因。

具有關聯記錄的檢視最初顯示帶有錄製按鈕的空白頁面。工具欄中也可以找到相同的錄製按鈕。

分配記錄不僅記錄分配的例項數,還記錄分配堆疊跟蹤。在記憶體中保留每個已分配記錄的堆疊跟蹤會產生過多的開銷,因此JProfiler會將記錄的堆疊跟蹤累積到樹中。這也有一個優點,您可以更輕鬆地解釋資料。但是,按時間順序丟失,無法從資料中提取某些時間範圍。

三、Memory analysis

分配記錄只能測量物件的分配位置,並且沒有關於物件之間引用的資訊。需要引用的任何記憶體分析(例如解決記憶體洩漏)都是在堆walker中完成的。堆walker獲取整個堆的快照並對其進行分析。這是一種侵入性操作,可能會暫停JVM - 可能需要很長時間 - 並且需要大量記憶體。

更輕量級的操作是在啟動用例之前標記堆上的所有物件,以便在以後獲取堆快照時可以找到所有新分配的物件。

JVM具有一個特殊的觸發器,用於將整個堆轉儲到以舊HPROF概要分析代理命名的檔案中。這與分析介面無關,並且不在其約束下執行。因此,HPROF堆轉儲速度更快,使用的資源更少。缺點是在檢視堆walker中的堆快照時,您將無法與JVM建立實時連線,並且某些功能不可用。

四、Method call recording

測量方法呼叫的時間長度是可選記錄,就像分配記錄一樣。方法呼叫被累積到樹中,並且存在各種檢視,其顯示來自不同視角的記錄資料,例如呼叫圖。此類資料的記錄在JProfiler中稱為“CPU記錄”。

在特定情況下,檢視方法呼叫的時間順序可能很有用,尤其是涉及多個執行緒時。對於這些特殊情況,JProfiler提供“呼叫跟蹤器”檢視。該檢視具有單獨的記錄型別,與更一般的CPU記錄無關。請注意,呼叫跟蹤器會產生太多資料,無法解決效能問題,它僅適用於特殊形式的除錯。

另一種分析方法呼叫的檢視是“方法統計”檢視。它引入了另一個測量軸,並記錄了每種方法的執行時間直方圖。除非您有興趣調查某些方法的執行時間是否存在異常值,否則您不需要此資料,並且其記錄會產生不可接受的開銷。因此,您需要在關聯檢視中開啟方法統計資訊的單獨記錄。

呼叫跟蹤器和方法統計資訊都依賴於CPU記錄,並在必要時自動開啟它。

另一種具有自己記錄的專業檢視是“複雜性分析”。它僅測量所選方法的執行時間,不需要啟用CPU記錄。其附加資料軸是可以使用指令碼計算的方法呼叫的演算法複雜度的數值。通過這種方式,您可以測量方法的執行時間如何取決於其引數。

五、Monitor recording

要分析執行緒等待或阻塞的原因,必須記錄相應的事件。這類事件的發生率差異很大。對於執行緒經常協調任務或共享公共資源的多執行緒程式,可能存在大量此類事件。這就是預設情況下不記錄此類時間順序資料的原因。

當您開啟監視器錄製時,“鎖定歷史記錄圖表”和“監視歷史記錄”檢視將開始顯示資料。

為消除噪音並減少記憶體消耗,不會記錄非常短的事件。檢視設定使您可以調整這些閾值。

六、Probe recording

探針顯示JVM中的更高階子系統,例如JDBC呼叫或檔案操作。預設情況下,不記錄探針,您可以為每個探針單獨切換記錄。有些探針會增加很少或沒有開銷,有些會產生大量資料,具體取決於您的應用程式正在做什麼以及如何配置探針。

就像分配記錄和方法呼叫記錄一樣,探測資料被累積,並且除時間線和遙測之外,時間資訊被丟棄。但是,大多數探測器還具有“事件”檢視,允許您檢查單個事件。這會增加潛在的大量開銷並具有單獨的記錄操作。記錄操作的狀態是持久的,因此當您切換探測記錄時,如果您之前已將其開啟,則也會切換相關的事件記錄。

JDBC探針具有記錄JDBC連線洩漏的第三個記錄操作。只有在您實際嘗試調查此類問題時,才會發生查詢連線洩漏的相關開銷。就像事件記錄動作一樣,洩漏記錄動作的選擇狀態是持久的。

七、Recording profiles

在許多情況下,您只需單擊即可開始或停止各種錄製。訪問所有相應的檢視並逐個切換錄製按鈕是不切實際的。這就是JProfiler有錄音配置檔案的原因。單擊工具欄中的“ 開始錄製”按鈕可以建立錄製配置檔案 。

錄製配置檔案定義了可以原子啟用的一種特定記錄組合。JProfiler試圖給你一個關於你選擇的錄音建立的開銷的粗略印象,並試圖阻止有問題的組合。特別是,分配記錄和CPU記錄不能很好地結合在一起,因為CPU資料的定時將因分配記錄而嚴重失真。

您可以在會話執行時隨時啟用錄製配置檔案。錄製配置檔案不是附加的,它們會停止錄製配置檔案中未包含的所有錄製內容。使用“ 停止錄製”按鈕可以停止所有錄製,無論它們如何被啟用。要檢查當前活動的錄影,請將滑鼠懸停在狀態列中的錄影標籤上。

開始分析時,也可以直接啟用錄製配置檔案。“會話啟動”對話方塊具有“ 初始錄製配置檔案”下拉列表。預設情況下,未選擇任何錄製配置檔案,但如果需要JVM啟動階段的資料,則可以使用此配置所需錄製的位置。

八、Recording with triggers

有時您希望在特定情況發生時開始錄製。JProfiler有一個 系統,用於定義執行操作列表的觸發器。可用的觸發操作還包括對活動記錄的更改。

例如,您可能只想在執行特定方法時啟動錄製。在這種情況下,您將轉到會話設定對話方塊,啟用“ 觸發器設定”選項卡併為該方法定義方法觸發器。對於操作配置,您可以使用許多不同的記錄操作。

“開始錄製”動作控制那些沒有任何引數的錄製。通常,當您停止並重新開始錄製時,將清除所有先前錄製的資料。對於“CPU資料”和“分配資料”記錄,您還可以選擇保留以前的資料並繼續累積多個間隔。

通過使用上下文選單中的“新增方法觸發器”操作,可以在呼叫樹中方便地新增方法觸發器。如果在同一會話中已有方法觸發器,則可以選擇將方法攔截新增到現有觸發器。

預設情況下,啟動JVM進行效能分析時,觸發器處於活動狀態。啟動時有兩種方法可以禁用觸發器:您可以在觸發器配置中單獨禁用它們,也可以在會話啟動對話方塊中取消選中 啟動時啟用觸發器複選框。在實時會話期間,您可以通過從選單中選擇效能分析 - >(啟用|禁用)觸發器或單擊 狀態列中的觸發器記錄狀態圖示來啟用或禁用所有觸發器。

有時,您需要同時為觸發組切換觸發器啟用。這可以通過為感興趣的觸發器分配相同的組ID並從選單呼叫 Profiling-> Enable Triggers Groups來實現。

JProfiler有一個命令列可執行檔案,用於控制已經分析的任何JVM中的記錄。jpcontroller要求釋出JProfiler MBean,否則它將無法連線到已配置的JVM。僅當分析代理已經收到分析設定時才會出現這種情況。如果沒有分析設定,代理將無法準確記錄要記錄的內容。

必須滿足以下條件之一:

  • 您已使用JProfiler GUI連線到JVM
  • 配置檔案JVM是使用-agentpath包含引數nowaitconfig引數的VM引數 啟動的。在整合嚮導中,這對應於Config同步步驟中的Startup立即模式和啟動時應用配置選項。
  • JVM準備用於使用jpenable可執行檔案進行分析,並-offline指定了 引數。有關jpenable -help 更多資訊,請參閱輸出。

具體而言,jpcontroller如果僅使用nowait標誌啟動已配置的JVM ,則無效 。在整合嚮導中,在Config同步步驟中使用JProfiler GUI選項連線時應用配置將配置此類引數。

jpcontroller為您提供所有錄音及其引數的迴圈多級選單。您還可以使用它儲存快照。