성능 분석

관리자는 성능 분석을 사용하여 플리트의 관리 인스턴스에서 실행되는 Java 애플리케이션의 성능 향상을 위한 권장 사항을 얻을 수 있습니다. 선택한 Java 애플리케이션의 경우 JMS는 애플리케이션의 JVM에서 JFR 기록을 시작합니다. 기록이 완료되면 JMS 플러그인이 JFR 파일을 OCI로 업로드합니다.

마지막 단계는 JFR 파일 분석 및 응용 프로그램의 JVM 구성에 대한 권장 사항이 포함된 보고서 생성입니다. 운용 환경에서 변경하기 전에 항상 응용 프로그램의 권장 값을 확인하십시오. 성능 목표를 달성하기 위한 최적의 JVM 구성을 찾는 것은 까다로울 수 있습니다. 의심스러운 경우 JMS가 JVM Flight Recorder 이벤트 분석에서 암시할 수 없다는 점을 고려해야 할 사항이 있습니다. 주저하지 말고 가치 엔지니어링 팀 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 클라우드 콘솔을 확인할 수 있습니다.

#!/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"
}