VisualVM中的JDK Flight Recorder支援 - Jiří Sedláček

banq發表於2019-10-12

JDK Flight Recorder支援的預覽版已作為與GraalVM 19.2捆綁在一起的VisualVM工具的外掛釋出。該外掛讀取從Java 7和更高版本建立的所有JFR快照,並以工具使用者熟悉的典型VisualVM檢視顯示資料。
JDK Flight Recorder(JFR,以前是Java Flight Recorder)是用於收集有關正在執行的Java應用程式的診斷和效能分析資料的工具。它已整合到Java虛擬機器(JVM)中,幾乎沒有效能開銷,因此,即使在負載很大的生產環境中也可以使用它。
介面功能描述:
  • 概述選項卡Overview tab 顯示有關記錄的程式的基本資訊,例如其主類,引數,JVM版本和配置以及系統屬性。此選項卡還提供對記錄的執行緒轉儲的訪問。
  • “監視器”選項卡Monitor tab 顯示程式的正常執行時間和基本遙測-CPU使用率,堆和元空間利用率,已載入類的數量以及活動和啟動的執行緒數。
  • “執行緒”選項卡Threads tab基於記錄配置,根據快照中記錄的所有事件儘可能精確地重建執行緒時間線。
  • “鎖定”選項卡Locks tab允許分析執行緒同步。
  • “檔案IO”選項卡顯示有關對檔案系統的讀寫事件的資訊。
  • 套接字Socket IO選項卡顯示有關對網路的讀寫事件的資訊。
  • “取樣器Sampler ”選項卡顯示每個執行緒的CPU使用率和記憶體分配,以及堆直方圖。還有一個實驗功能“ CPU取樣器”,可從記錄的事件中構建CPU快照。它沒有提供精確的效能分析,但仍有助於瞭解記錄的應用程式中發生了什麼以及CPU瓶頸可能在哪裡。
  • “瀏覽器Browser ”選項卡提供了快照中記錄的所有事件的通用瀏覽器。
  • “環境Environment ”選項卡概述了記錄機器的設定和條件,例如CPU型號,記憶體大小,作業系統版本,CPU利用率,記憶體使用率等。
  • 記錄Recording選項卡列出了記錄設定和基本快照遙測,例如事件數,總記錄時間等。

預覽版中不提供某些高階功能,如分析JVM內部,顯示事件堆疊跟蹤或支援從實時程式建立JFR快照,這些功能將在預覽版本中逐步解決。

要安裝JFR支援,請從https://www.graalvm.org下載GraalVM 19.2或更高版本,安裝並執行<GRAALVM_HOME>/bin/jvisualvm以啟動VisualVM。使用工具| 外掛| 可用外掛列出所有可用外掛並安裝VisualVM-JFR和VisualVM-JFR-Generic模組。可以使用檔案|檔案管理器開啟JFR快照。載入...操作或透過雙擊“ JFR快照”節點並將快照永久新增到JFR儲存庫中。

請按照您的Java版本的文件來建立JFR快照。對於GraalVM Enterprise,可以透過在java命令中新增以下引數來建立JFR快照:

<GRAALVM_HOME>/bin/java -XX:+UnlockCommercialFeatures 
-XX:StartFlightRecording=duration=10s,filename=filename.jfr -jar ...


請注意,由於底層的OpenJDK 8不支援在GraalVM 19.2 CE中建立JFR快照,因此不可用。您可以使用OpenJDK 11和更高版本來建立JFR快照:

<OPENJDK11_HOME>/bin/java -XX:StartFlightRecording=duration=10s,filename=filename.jfr -jar ...


如果您想在Java應用程式上對其進行測試,但沒有自己喜歡的工具,可以嘗試使用Spring Petclinic示例Web應用程式

git clone https://github.com/spring-projects/spring-petclinic.git
mvn clean package -DskipTests=true
# verify it works: 
<GRAALVM_HOME>/bin/java -jar target/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar


這將啟動示例應用程式,並使其在localhost:8080上可用。
現在,您只需要在命令中新增上面的命令列選項,javaFlight Recorder就會收集分析資訊。

<GRAALVM_HOME>/bin/java -XX:+UnlockCommercialFeatures -XX:StartFlightRecording=dumponexit=true,filename=petclinic.jfr -jar target/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar


請注意在dumponexit=true應用程式執行結束時用於填充檔案的命令,另一種選擇是指定記錄的持續時間。
開啟應用程式並單擊,或者如果您有負載生成工具(例如wrk),則可以使用它來生成示例工作負載以獲取更有意義的配置檔案。例如,以下命令將對正在執行的應用程式中的網頁之一施加負載30秒。

wrk -d30s -R2000 http://localhost:8080/owners\?lastName\=


停止應用程式,確認petclinic.jfr檔案存在,然後如上所述將其載入到VisualVM中。
您現在可以從VisualVM調查JFR記錄有關您的應用程式的日期。

請注意,JFR記錄是進行效能分析的最佳工具之一,如果您希望GraalVM Enterprise更好地處理工作負載,則可以與GraalVM團隊聯絡,例如在GitHub上,我們將嘗試調查是否有最佳化的機會。
感謝您對VisualVM中的JFR支援的反饋-請讓我們知道您希望在下一版本中看到哪些功能!將您的評論留在本文下方或http://visualvm.github.io/feedback.html,或在https://github.com/oracle/visualvm/issues提交RFE / bug 。

點選標題見原文圖

相關文章