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

  1. Connectez-vous à la console OCI en tant qu'administrateur.
  2. Ouvrez le menu de navigation, cliquez sur Observation et gestion, puis sur Parcours sous Java Management.
  3. Sélectionnez votre parc.
  4. Cliquez sur Instances gérées, puis sur l'instance gérée sur laquelle l'application est exécutée.
  5. Cliquez sur Applications et sélectionnez l'application sur laquelle l'enregistrement JFR doit être démarré.
  6. Cliquez sur Actions, puis sélectionnez Exécuter JDK Flight Recorder.
  7. Cliquez sur Démarrer.
  8. 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

  1. 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
  2. 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
  3. Modifiez le fichier json de charge utile, par exemple :
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "applicationKey": "$APP_KEY",
        "jreKey": "$APP_JRE_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID"
      }
    ]
  4. 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

Comme Java Flight Recording peut collecter autant de mesures intéressantes, il est difficile de n'en citer qu'un exemple. À partir des exemples de fonctionnalités d'analyse de cryptographie et de performances, vous pouvez voir une bonne utilisation dans les domaines de la sécurité ou des performances. Dans l'exemple suivant, nous allons vous montrer un exemple d'utilisation de JMS pour créer des enregistrements JFR sur le serveur d'applications Tomcat avec un profil personnalisé JFR :
#!/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