JDK Flight Recorder

Java Flight Recorder (JFR)は、JavaアプリケーションとそのJVMを実行するための様々なデータを収集するための多目的ツールです。JMSはその上に構築され、フリート管理者はJMSによって検出されたすべてのアプリケーションでJFR記録をリクエストできます。

様々なツールを使用してJFR記録を開始し、JFR記録を収集し、ある場所から記録にアクセスすることで、アプリケーションを実行しているマシンにアクセスする負荷が軽減されます。Java Flight Recorderは、メモリー使用量、ガベージ・コレクション、スレッド使用量、例外など、JVMによって提供される多くの有用なメトリックを監視および収集できるため、お客様はアプリケーションの動作を簡単に追跡できます。

OCIクラウド・コンソール

  1. OCIコンソールに管理者としてサインインします。
  2. ナビゲーション・メニューを開き、「監視および管理」をクリックし、「Java管理」の下の「フリート」をクリックします。
  3. フリートを選択します。
  4. 「管理対象インスタンス」をクリックし、アプリケーションが実行されている管理対象インスタンスをクリックします。
  5. 「アプリケーション」をクリックし、JFR記録を開始するアプリケーションを選択します。
  6. 「アクション」をクリックし、「JDKフライト・レコーダの実行」を選択します。
  7. 「開始」をクリックします。
  8. 作業リクエストが終了したら、作業リクエストをクリックし、詳細でフリートのバケットにあるJFRファイルにナビゲートします。

OCI CLI

  1. 次のコマンドを使用して、ターゲット・ペイロード・テンプレートを作成します。
    oci jms fleet request-jfr-recordings --generate-param-json-input
        targets
  2. 次のようにして、アプリケーションの詳細を検索します。
    oci jms application-installation-usage-summary summarize-application-installation-usage
          --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
  3. ペイロードjsonファイルを編集します。たとえば:
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "applicationKey": "$APP_KEY",
        "jreKey": "$APP_JRE_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID"
      }
    ]
  4. 次のコマンドを実行します:
    oci jms fleet request-jfr-recordings --fleet-id $FLEET_OCID
          --jfc-profile-name default.jfc --targets file://targets.json

Java Flight Recordingでは非常に多くの興味深いメトリックを収集できるため、1つの良い例を指摘するのは困難です。暗号分析およびパフォーマンス分析機能の例から、セキュリティまたはパフォーマンスの分野で良好な使用状況を確認できます。次の例では、JFRカスタマイズされたプロファイルを持つTomcatアプリケーション・サーバーでJFR記録を作成するためにJMSを使用する例を示します。
#!/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バンドルの一部です。
  • base64コマンドライン・ユーティリティがWindowsプラットフォームに存在しない可能性があります。

作業リクエストが完了すると、フリートに関連付けられたバケットに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