JDK Flight Recorder
Java Flight Recorder (JFR) 是一種多用途工具,可收集執行 Java 應用程式與其 JVM 的各種資料。JMS 建置在其中,讓機組管理員可以要求 JMS 所發現之所有應用程式的 JFR 記錄。
使用各種工具啟動 JFR 錄製、收集 JFR 錄製內容以及從一個位置存取錄製內容的機器,會透過 JMS 降低存取應用程式的負擔。由於 Java Flight Recorder 可以觀察並收集 JVM 所提供的許多實用度量,例如記憶體使用狀況、資源回收、繫線使用狀況、異常狀況等,因此客戶可以輕鬆追蹤其應用程式的行為。
OCI 雲端主控台
- 以管理員身分登入 OCI 主控台。
- 開啟導覽功能表,按一下可觀測性與管理,然後按一下 Java 管理下的機組。
- 選取您的機組。
- 按一下受管理執行處理,然後按一下執行應用程式的受管理執行處理。
- 按一下應用程式,然後選取要啟動 JFR 記錄的應用程式。
- 按一下動作,然後選取執行 JDK Flight Recorder 。
- 按一下開始。
- 工作要求完成之後,請按一下工作要求,然後在詳細資訊中瀏覽至機組儲存桶中的 JFR 檔案。
OCI CLI
- 使用下列命令建立目標有效負載樣板:
oci jms fleet request-jfr-recordings --generate-param-json-input targets
- 尋找有關您應用程式的詳細資訊,例如:
oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
- 編輯有效負載 json 檔案,例如:
[ { "applicationInstallationKey": "$APP_INSTALL_KEY", "applicationKey": "$APP_KEY", "jreKey": "$APP_JRE_KEY", "managedInstanceId": "$MANAGED_INSTANCE_OCID" } ]
- 執行下列命令:
oci jms fleet request-jfr-recordings --fleet-id $FLEET_OCID --jfc-profile-name default.jfc --targets file://targets.json
範例
由於 Java Flight Recording 可以收集許多有趣的指標,因此無法只指出一個好的範例。從加密和效能分析功能的範例,您可以看到在安全或效能領域的良好使用。在下列範例中,我們將示範使用 JMS 在 Tomcat 應用程式伺服器上使用 JFR 自訂設定檔建立 JFR 記錄的範例:
#!/usr/bin/env bash
# configuration variables
APP_INSTALL_LOCATION=/usr/share/tomcat
JFC_FILENAME=custom.jfc
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
# get application installation key
APP_INSTALL_KEY=$(oci jms application-installation-usage-summary summarize-application-installation-usage --app-installation-path-contains "$APP_INSTALL_LOCATION" --fleet-id $FLEET_OCID | jq -r '.data.items[]."application-installation-key"')
# create custom jfc file from default profile
jfr configure thread-dump=10s exceptions=all --output $JFC_FILENAME
ENCODED_JFC=$(cat $JFC_FILENAME | base64)
# start jfr recording with v2 custom profile for JDK 9 or higher
WORK_REQUEST_OCID=$(oci jms fleet request-jfr-recordings \
--fleet-id "$FLEET_OCID" \
--jfc-profile-name custom-profile \
--jfc-v2 "$ENCODED_JFC" \
--targets "[{\"applicationInstallationKey\":\"$APP_INSTALL_KEY\", \"managedInstanceId\":\"$MANAGED_INSTANCE_OCID\"}]" | jq -r '."opc-work-request-id"')
echo $WORK_REQUEST_OCID
# additionally you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status
附註:
jfr
命令行公用程式是最新 JDK 組合的一部分。- Windows 平台上可能沒有
base64
命令行公用程式。
工作要求完成後,會將 JFR 上傳至與您的機組關聯的儲存桶:
# list all the jfr recordings created during work request execution
oci jms work-request-log-entry list-work-request-logs --all --work-request-id "$WORK_REQUEST_OCID" | jq -r '.data.items[].message | fromjson | select(.objectName != null) | .objectName' | sort | uniq
JMS/JFR/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/20250710104111_155_0_91783_0_org.apache.catalina.startup.Bootstrap.jfr