JDK Flight Recorder
Java Flight Recorder (JFR) est un outil polyvalent permettant de collecter diverses données pour l'exécution d'applications Java et de sa JVM. JMS s'appuie dessus et permet aux administrateurs de parc de demander des enregistrements JFR sur toutes les applications repérées par JMS.
La charge de l'accès aux machines exécutant les applications, à l'aide de divers outils pour démarrer les enregistrements JFR, collecter les enregistrements JFR et accéder aux enregistrements à partir d'un seul emplacement, est réduite à l'aide de JMS. Etant donné que Java Flight Recorder peut observer et collecter de nombreuses mesures utiles fournies par JVM, telles que l'utilisation de la mémoire, le nettoyage de la mémoire, l'utilisation des threads, les exceptions, etc., les clients peuvent facilement suivre le comportement de leurs applications.
Console OCI Cloud
- Connectez-vous à la console OCI en tant qu'administrateur.
- Ouvrez le menu de navigation, cliquez sur Observation et gestion, puis sur Parcours sous Java Management.
- Sélectionnez votre parc.
- Cliquez sur Instances gérées, puis sur l'instance gérée sur laquelle l'application est exécutée.
- Cliquez sur Applications et sélectionnez l'application sur laquelle l'enregistrement JFR doit être démarré.
- Cliquez sur Actions, puis sélectionnez Exécuter JDK Flight Recorder.
- Cliquez sur Démarrer.
- Une fois la demande de travail terminée, cliquez sur la demande de travail et accédez en détail aux fichiers JFR situés dans le bucket de votre parc.
Interface de ligne de commande OCI
- Créez un modèle de charge utile cible à l'aide de la commande suivante :
oci jms fleet request-jfr-recordings --generate-param-json-input targets
- Recherchez les détails de votre application, par exemple :
oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
- Modifiez le fichier json de charge utile, par exemple :
[ { "applicationInstallationKey": "$APP_INSTALL_KEY", "applicationKey": "$APP_KEY", "jreKey": "$APP_JRE_KEY", "managedInstanceId": "$MANAGED_INSTANCE_OCID" } ]
- Exécutez la commande suivante :
oci jms fleet request-jfr-recordings --fleet-id $FLEET_OCID --jfc-profile-name default.jfc --targets file://targets.json
Exemple
#!/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
Remarques :
- L'utilitaire de ligne de commande
jfr
fait partie des bundles JDK plus récents. - L'utilitaire de ligne de commande
base64
n'est peut-être pas présent sur la plate-forme Windows.
Une fois la demande de travail terminée, le fichier JFR est téléchargé dans le bucket associé à votre parc :
# 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