Análisis de Rendimiento

Mediante el análisis de rendimiento, los administradores pueden obtener recomendaciones para mejorar el rendimiento de las aplicaciones Java que se ejecutan en instancias gestionadas del conjunto. Para la aplicación Java seleccionada, JMS iniciará el registro de JFR en la JVM de la aplicación, una vez que se haya completado el registro, el plugin JMS cargará el archivo JFR en OCI.

El paso final es el análisis de los archivos JFR y la creación de un informe con recomendaciones para la configuración de JVM de la aplicación. Verifique siempre los valores recomendados para las aplicaciones antes de realizar los cambios en los entornos de producción. Encontrar la mejor configuración de JVM para lograr sus objetivos de rendimiento puede ser complicado, hay cosas que considerar que JMS no puede implicar solo analizar los eventos de JVM Flight Recorder, si tiene dudas, no dude en ponerse en contacto con nuestro equipo de ingeniería de valor https://www.oracle.com/java/java-se-subscription/value-engineering/.

Consola de OCI Cloud

  1. Conéctese a la consola de OCI como administrador.
  2. Abra el menú de navegación, haga clic en Observability & Management y, a continuación, haga clic en Fleets en Java Management.
  3. Seleccione su flota.
  4. Haga clic en Instancias gestionadas y, a continuación, en la instancia gestionada en la que se está ejecutando la aplicación.
  5. Haga clic en Aplicaciones y seleccione la aplicación en la que se debe iniciar el análisis de rendimiento.
  6. Haga clic en Acciones y seleccione Iniciar análisis de rendimiento.
  7. Haga clic en Iniciar.
  8. Una vez finalizada la solicitud de trabajo, haga clic en Informes de análisis de rendimiento.

CLI de OCI

  1. Cree una plantilla de carga útil de destino con el siguiente comando:
    oci jms fleet request-performance-tuning-analyses --generate-param-json-input
        targets
  2. Encuentre detalles sobre su aplicación, por ejemplo, con:
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "applicationKey": "$APP_KEY",
        "jreKey": "$APP_JRE_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID"
      }
    ]
  3. Ejecute el siguiente comando:
    oci jms fleet request-performance-tuning-analyses --fleet-id $FLEET_OCID
          --recording-duration-in-minutes $RECORDING_DURATION --targets file://targets.json

Ejemplo

En el siguiente ejemplo utilizaremos la misma aplicación que utilizamos para la demostración de la función de análisis criptográfico:

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

Una vez finalizada la solicitud de trabajo de análisis de rendimiento, podemos comprobar el resultado con las siguientes llamadas de API, o bien podemos comprobar la consola de 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"
}