JDK Flight Recorder
Java Flight Recorder (JFR) ist ein Mehrzweck-Tool zum Erfassen verschiedener Daten für die Ausführung von Java-Anwendungen und ihrer JVM. JMS baut darauf auf und ermöglicht es Flottenadministratoren, JFR-Aufzeichnungen für alle von JMS erkannten Anwendungen anzufordern.
Der Zugriff auf die Maschinen, auf denen die Anwendungen ausgeführt werden, mit verschiedenen Tools zum Starten von JFR-Aufzeichnungen, zum Sammeln der JFR-Aufzeichnungen und zum Zugriff auf die Aufzeichnungen von einem Ort aus wird durch JMS reduziert. Da Java Flight Recorder viele nützliche Metriken wie Speichernutzung, Garbage Collection, Threadnutzung, Ausnahmen usw. beobachten und erfassen kann, können Kunden das Verhalten ihrer Anwendungen einfach verfolgen.
OCI Cloud-Konsole
- Melden Sie sich bei der OCI-Konsole als Administrator an.
- Öffnen Sie das Navigationsmenü, klicken Sie auf Observability and Management, Flotten unter Java Management.
- Wählen Sie Ihre Flotte aus.
- Klicken Sie auf Verwaltete Instanzen, und klicken Sie dann auf die verwaltete Instanz, auf der die Anwendung ausgeführt wird.
- Klicken Sie auf Anwendungen, und wählen Sie die Anwendung aus, auf der die JFR-Aufzeichnung gestartet werden soll.
- Klicken Sie auf Aktionen, und wählen Sie JDK Flight Recorder ausführen aus.
- Klicken Sie auf Starten.
- Nachdem die Arbeitsanforderung abgeschlossen ist, klicken Sie auf die Arbeitsanforderung, und navigieren Sie im Detail zu den JFR-Dateien im Bucket Ihrer Flotte.
OCI-CLI
- Erstellen Sie die Ziel-Payload-Vorlage mit dem folgenden Befehl:
oci jms fleet request-jfr-recordings --generate-param-json-input targets
- Details zu Ihrer Anwendung finden Sie unter:
oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
- Bearbeiten Sie die Payload-JSON-Datei. Beispiel:
[ { "applicationInstallationKey": "$APP_INSTALL_KEY", "applicationKey": "$APP_KEY", "jreKey": "$APP_JRE_KEY", "managedInstanceId": "$MANAGED_INSTANCE_OCID" } ]
- Führen Sie den folgenden Befehl aus:
oci jms fleet request-jfr-recordings --fleet-id $FLEET_OCID --jfc-profile-name default.jfc --targets file://targets.json
Beispiel
#!/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
Hinweis:
- Das Befehlszeilenutility
jfr
ist Teil neuerer JDK-Bundles. - Das Befehlszeilenutility
base64
ist möglicherweise nicht auf der Windows-Plattform vorhanden.
Sobald die Arbeitsanforderung abgeschlossen ist, wird der JFR in den Bucket hochgeladen, der mit Ihrer Flotte verknüpft ist:
# 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