JDK Flight Recorder
Java Flight Recorder (JFR) es una herramienta multipropósito para recopilar varios datos para ejecutar aplicaciones Java y su JVM. JMS se basa en él y permite a los administradores de conjuntos solicitar grabaciones JFR en todas las aplicaciones detectadas por JMS.
La carga de acceder a las máquinas que ejecutan las aplicaciones, utilizando varias herramientas para iniciar las grabaciones de JFR, recopilar las grabaciones de JFR y acceder a las grabaciones desde un solo lugar se reduce mediante JMS. Dado que Java Flight Recorder puede observar y recopilar muchas métricas útiles proporcionadas por JVM, como el uso de memoria, la recopilación de elementos no utilizados, el uso de threads, excepciones, etc., los clientes pueden realizar un seguimiento sencillo del comportamiento de sus aplicaciones.
Consola de OCI Cloud
- Conéctese a la consola de OCI como administrador.
- Abra el menú de navegación, haga clic en Observability & Management y, a continuación, haga clic en Fleets en Java Management.
- Seleccione su flota.
- Haga clic en Instancias gestionadas y, a continuación, en la instancia gestionada en la que se está ejecutando la aplicación.
- Haga clic en Aplicaciones y seleccione la aplicación en la que se debe iniciar la grabación de JFR.
- Haga clic en Acciones y seleccione Ejecutar grabadora de vuelo de JDK.
- Haga clic en Iniciar.
- Una vez finalizada la solicitud de trabajo, haga clic en la solicitud de trabajo y, en los detalles, navegue a los archivos JFR ubicados en el bloque del conjunto.
CLI de OCI
- Cree una plantilla de carga útil de destino con el siguiente comando:
oci jms fleet request-jfr-recordings --generate-param-json-input targets
- Encuentre detalles sobre su aplicación, por ejemplo, con:
oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
- Edite el archivo json de carga útil, por ejemplo:
[ { "applicationInstallationKey": "$APP_INSTALL_KEY", "applicationKey": "$APP_KEY", "jreKey": "$APP_JRE_KEY", "managedInstanceId": "$MANAGED_INSTANCE_OCID" } ]
- Ejecute el siguiente comando:
oci jms fleet request-jfr-recordings --fleet-id $FLEET_OCID --jfc-profile-name default.jfc --targets file://targets.json
Ejemplo
#!/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
Note:
- La utilidad de línea de comandos
jfr
forma parte de los paquetes de JDK más recientes. - Es posible que la utilidad de línea de comandos
base64
no esté presente en la plataforma Windows.
Una vez que se completa la solicitud de trabajo, JFR se carga en el bloque asociado a su conjunto:
# 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