パフォーマンス分析

パフォーマンス分析を使用すると、管理者は、フリート内の管理対象インスタンスで実行されているJavaアプリケーションのパフォーマンスを向上させるための推奨事項を取得できます。選択したJavaアプリケーションの場合、JMSはアプリケーションのJVMでJFR記録を開始します。記録が完了すると、JMSプラグインはJFRファイルをOCIにアップロードします。

最後のステップは、JFRファイルの分析と、アプリケーションのJVM構成に関する推奨事項を含むレポートの作成です。本番環境で変更を行う前に、必ずアプリケーションの推奨値を確認してください。パフォーマンス目標を達成するための最適なJVM構成を見つけることは難しい場合があります。JMSがJVMフライト・レコーダのイベントを分析すること以外に意味がないことを考慮する必要があります。疑問がある場合は、バリュー・エンジニアリング・チームhttps://www.oracle.com/java/java-se-subscription/value-engineering/にご連絡ください。

OCIクラウド・コンソール

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

OCI CLI

  1. 次のコマンドを使用して、ターゲット・ペイロード・テンプレートを作成します。
    oci jms fleet request-performance-tuning-analyses --generate-param-json-input
        targets
  2. 次のようにして、アプリケーションの詳細を検索します。
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "applicationKey": "$APP_KEY",
        "jreKey": "$APP_JRE_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID"
      }
    ]
  3. 次のコマンドを実行します:
    oci jms fleet request-performance-tuning-analyses --fleet-id $FLEET_OCID
          --recording-duration-in-minutes $RECORDING_DURATION --targets file://targets.json

次の例では、暗号分析機能のデモンストレーションに使用したものと同じアプリケーションを使用します。

#!/usr/bin/env bash
 
# configuration variables
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
APP_NAME=spring-tls-server
 
# get application key
APP_KEY=$(oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID | jq -r '.data.items[]."application-key"')
 
# start performance analysis on specified managed instance
WORK_REQUEST_OCID=$(oci jms fleet request-performance-tuning-analyses \
    --fleet-id "$FLEET_OCID" \
    --recording-duration-in-minutes 15 \
    --targets "[{\"managedInstanceId\":\"$MANAGED_INSTANCE_OCID\",\"applicationKey\":\"$APP_KEY\"}]" | jq -r '."opc-work-request-id"')
 
echo $WORK_REQUEST_OCID

パフォーマンス分析の作業リクエストが終了したら、次のAPIコールで結果を確認することも、JMC OCI Cloudコンソールを確認することもできます。

#!/usr/bin/env bash
 
# configuration variables
APP_NAME=spring-tls-server-1.1.0.jar
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
WORK_REQUEST_OCID=ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaavcnv2khspnmu7aj7bjlg2c7rytar7an7wbidhmvgm2fnbr6mvx4a
 
# get jms report location in object storage service related to our work request, the output will print namespace, bucket-name and object-name
oci jms  performance-tuning-analysis-result list \
    --fleet-id $FLEET_OCID \
    --sort-by timeCreated \
    --sort-order DESC \
    --all \
    --application-name=$APP_NAME \
    --managed-instance-id "$MANAGED_INSTANCE_OCID" | jq -r ".data.items[]| select(.\"work-request-id\"==\"$WORK_REQUEST_OCID\") | .namespace,.\"bucket-name\",.\"object-name\""
 
# namespace, bucket-name and name parameters where taken from the report payload above
oci os object get \
    --namespace frmss8xk2qta \
    --bucket-name jms_ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta \
    --name JMS/ANALYSIS/PERFTUNING/RESULTS/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/PerfTuningAnalysisResult-20250714094533-ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaavcnv2khspnmu7aj7bjlg2c7rytar7an7wbidhmvgm2fnbr6mvx4a-9379a93c-1f35-4574-b528-266d6f8f9984.json
 
{
  "applicationName": "spring-tls-server-1.1.0.jar",
  "applicationId": "afecbb29e4f96bc9c87c5138a26877bd713305696e4f909af2c8947065e0c7cf",
  "applicationInstallationId": "36be37c500e042eeef9e7aa52c294bbafd51556a90fd4eaae0c6ce099939d77c",
  "jfrFileName": "JMS/JFR/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/20250714092917_479_0_1840025_0_spring-tls-server-1.1.0.jar.jfr",
  "timeAnalyzed": "2025-07-14T09:45:33.022837159Z",
  "summary": {
    "warnings": [
      {
        "key": 1,
        "code": "G1GCSmallerNewSizeFromMaxGCPauseMillisRule",
        "description": "Decrease Young generation size to achieve lower pauses",
        "message": "Current MaxGCPauseMillis (-2ms) is far from the actual average Young GC time (13.95ms). Setting smaller young generation may reduce average Young GC time. For example, this can be achieved by reducing -XX:MaxNewSize=40m. ",
        "currentVmOptions": "",
        "recommendedVmOptions": "-Xmn40894464",
        "detailsLink": "https://docs.oracle.com/en/java/javase/guides/vm/gctuning/g1_gc_tuning.html#g1_gc_tuning ",
        "comment": ""
      },
      ...
    ],
    "currentVmOptions": "",
    "recommendedVmOptions": "-Xmn39m -XX:MetaspaceSize=92m -Xmx238m -Xms238m -XX:MaxHeapSize=238m -XX:MinHeapSize=238m -XX:InitialHeapSize=238m -XX:+AlwaysPreTouch"
  },
  "version": "1.0"
}