성능 분석
관리자는 성능 분석을 사용하여 플리트의 관리 인스턴스에서 실행되는 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 클라우드 콘솔
- OCI 콘솔에 관리자로 사인인합니다.
- 탐색 메뉴를 열고 관찰 가능성 및 관리를 누른 다음 Java 관리에서 플리트를 누릅니다.
- 플리트를 선택합니다.
- 관리 인스턴스를 누른 다음 애플리케이션이 실행 중인 관리 인스턴스를 누릅니다.
- 애플리케이션을 누르고 성능 분석을 시작할 애플리케이션을 선택합니다.
- 작업을 누르고 성과 분석 시작을 선택합니다.
- 시작을 누릅니다.
- 작업 요청이 완료되면 성과 분석 보고서를 누릅니다.
OCI CLI
- 다음 명령을 사용하여 대상 페이로드 템플리트를 생성합니다.
oci jms fleet request-performance-tuning-analyses --generate-param-json-input targets
- 응용 프로그램에 대한 세부 정보를 찾습니다. 예를 들면 다음과 같습니다.
[ { "applicationInstallationKey": "$APP_INSTALL_KEY", "applicationKey": "$APP_KEY", "jreKey": "$APP_JRE_KEY", "managedInstanceId": "$MANAGED_INSTANCE_OCID" } ]
- 다음 명령을 실행합니다.
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"
}