Slide 1

Slide 1 text

Performance-Engpässe finden mit dem Java Flight Recorder Alexander Schwartz, Principal Software Engineer @ Red Hat betterCode() Java | 2023-10-04

Slide 2

Slide 2 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 2 Performance-Engpässe finden mit dem Java Flight Recorder Motivation 1 Fähigkeiten des Java Flight Recorders 2 Beispiele innerhalb und außerhalb von Containern 3 Zusammenfassung 4

Slide 3

Slide 3 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 3 Performance-Engpässe finden mit dem Java Flight Recorder Motivation 1 Fähigkeiten des Java Flight Recorders 2 Beispiele innerhalb und außerhalb von Containern 3 Zusammenfassung 4

Slide 4

Slide 4 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 4 Motivation Stabiles System in Produktion Development Test Production

Slide 5

Slide 5 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 5 Motivation Stabiles System in Produktion Production Development Test

Slide 6

Slide 6 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 6 Motivation Analyse des laufenden Systems Methode Vor- und Nachteile Logging Je nach Log-Level viele Daten. Auswertung von Anwendungs-Logs für Performance- Analyse schwierig. Java VM Logs sind ggf. hilfreich.

Slide 7

Slide 7 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 7 Motivation Analyse des laufenden Systems Methode Vor- und Nachteile Logging Je nach Log-Level viele Daten. Auswertung von Anwendungs-Logs für Performance- Analyse schwierig. Java VM Logs sind ggf. hilfreich. Tracing Große Datenmenge, daher meist nur ein Teil der Requests aufgezeichnet. Gut Suchmöglichkeit. Verfolgbarkeit über Systemgrenzen hinweg möglich. Instrumentierung z. B. über OpenTelemetry. Zusätzliche Infrastruktur notwendig.

Slide 8

Slide 8 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 8 Motivation Analyse des laufenden Systems Methode Vor- und Nachteile Logging Je nach Log-Level viele Daten. Auswertung von Anwendungs-Logs für Performance- Analyse schwierig. Java VM Logs sind ggf. hilfreich. Tracing Große Datenmenge, daher meist nur ein Teil der Requests aufgezeichnet. Gut Suchmöglichkeit. Verfolgbarkeit über Systemgrenzen hinweg möglich. Instrumentierung z. B. über OpenTelemetry. Zusätzliche Infrastruktur notwendig. Metriken Muss im Code eingebaut oder Instrumentierung wie OpenTelemetry nachgerüstet werden. Ressourcen wie z. B. Datenbank-Connection-Pools können gut beobachtet werden, CPU-Nutzung nicht.

Slide 9

Slide 9 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 9 Motivation Analyse des laufenden Systems Methode Vor- und Nachteile Logging Je nach Log-Level viele Daten. Auswertung von Anwendungs-Logs für Performance- Analyse schwierig. Java VM Logs sind ggf. hilfreich. Tracing Große Datenmenge, daher meist nur ein Teil der Requests aufgezeichnet. Gut Suchmöglichkeit. Verfolgbarkeit über Systemgrenzen hinweg möglich. Instrumentierung z. B. über OpenTelemetry. Zusätzliche Infrastruktur notwendig. Metriken Muss im Code eingebaut oder Instrumentierung wie OpenTelemetry nachgerüstet werden. Ressourcen wie z. B. Datenbank-Connection-Pools können gut beobachtet werden, CPU-Nutzung nicht. Profiling Einzelne Methodenaufrufe können gemessen werden (benötigt Instrumentierung), oder Stack Sampling (benötigt keine Instrumentierung)

Slide 10

Slide 10 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 10 Motivation Analyse des laufenden Systems Methode Vor- und Nachteile Logging Je nach Log-Level viele Daten. Auswertung von Anwendungs-Logs für Performance- Analyse schwierig. Java VM Logs sind ggf. hilfreich. Tracing Große Datenmenge, daher meist nur ein Teil der Requests aufgezeichnet. Gut Suchmöglichkeit. Verfolgbarkeit über Systemgrenzen hinweg möglich. Instrumentierung z. B. über OpenTelemetry. Zusätzliche Infrastruktur notwendig. Metriken Muss im Code eingebaut oder Instrumentierung wie OpenTelemetry nachgerüstet werden. Ressourcen wie z. B. Datenbank-Connection-Pools können gut beobachtet werden, CPU-Nutzung nicht. Profiling Einzelne Methodenaufrufe können gemessen werden (benötigt Instrumentierung), oder Stack Sampling (benötigt keine Instrumentierung)

Slide 11

Slide 11 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 11 Performance-Engpässe finden mit dem Java Flight Recorder Motivation 1 Fähigkeiten des Java Flight Recorders 2 Beispiele innerhalb und außerhalb von Containern 3 Zusammenfassung 4

Slide 12

Slide 12 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 12 Fähigkeiten des Java Flight Recorders Überblick über den Java Flight Recorder • Standard Profiler • Stack-Trace-Profiling von Threads im „Running“ Status • Eingebaut in OpenJDK Java VM • Effizientes Logging von Events: • JVM Standard Events • Custom Events • Async Profiler • Stack-Trace-Profiling aller Threads („wall clock“) oder der laufenden Threads („cpu“) • Method-Instrumentierung

Slide 13

Slide 13 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 13 Fähigkeiten des Java Flight Recorders Standard vs. Async Profiler Standard Profiler Async Profiler Safepoint Bias Low Overhead Überall anwendbar – auch ohne erweiterte Rechte Benötigt erweiterte Kernel-Privilegien für cpu- profiling, Fallback itimer Profiling von “Running” Threads im JVM Mode Profiling aller Threads, inkl. von Wartezeiten Recording von JVM Stacks Recording von JVM und native Stacks Zeichnet JVM JFR Events gemäß Profiling auf Erzeugt ein Subset an JFR Events

Slide 14

Slide 14 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 14 Fähigkeiten des Java Flight Recorders Safepoint Problem GREEN Executing Java YELLOW Descheduled Java RED Native http://psy-lob-saw.blogspot.com/2015/12/safepoints.html

Slide 15

Slide 15 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 15 Performance-Engpässe finden mit dem Java Flight Recorder Motivation 1 Fähigkeiten des Java Flight Recorders 2 Beispiele innerhalb und außerhalb von Containern 3 Zusammenfassung 4

Slide 16

Slide 16 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 16 Beispiele Kommandozeile Standard JFR Recording jcmd 1 JFR.start duration=60s \ filename=/tmp/recording.jfr \ settings=/usr/lib/jvm/java/lib/jfr/profile.jfc Process-ID Kommando Dauer Ziel Konfiguration https://docs.oracle.com/en/java/java-components/jdk-mission-control/ https://docs.oracle.com/en/java/javase/19/docs/specs/man/java.html

Slide 17

Slide 17 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 17 Beispiele Kommandozeile Async Profiling asprof -e cpu -d 10 -i 10ms -f profile.jfr ... asprof -e wall ... asprof -e ClassName.methodName ... asprof list ... https://github.com/async-profiler/async-profiler

Slide 18

Slide 18 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 18 Beispiele Cryostat – JFR for Containerized Java Applications

Slide 19

Slide 19 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 19 Cryostat – Discovery über JMX Container Ports # JVM Options ... -Dcom.sun.management.jmxremote.port=9091 ... # Pod template containers: ports: - containerPort: 9091 protocol: TCP name: jfr-jmx

Slide 20

Slide 20 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 20 Cryostat – Discovery über Cryostat Java Agent # JVM Options ... -javaagent:cryostat-agent.jar ... # Configuration for Cryostat‘s callback to the agent CRYOSTAT_AGENT_CALLBACK=https://myapp.example.com:8080/ https://developers.redhat.com/blog/2023/06/29/profiling-java-workloads-cryostat-agent

Slide 21

Slide 21 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 21 Beispiele Cryostat – Recording nicht nur über die UI

Slide 22

Slide 22 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz Beispiele 22 JDK Mission Control https://docs.oracle.com/en/java/java-components/jdk-mission-control/8/user-guide/whats-new-jdk-mission-control.html “Stack trace graph views such as Graph, Flame, Heat map, and Dependency are currently supported on Linux and Mac.”

Slide 23

Slide 23 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 23 Beispiele IntelliJ Ultimate Profiler https://www.jetbrains.com/help/idea/tutorial-get-started-with-profiling.html#optimize

Slide 24

Slide 24 text

• Neues Event: VirtualThreadPinned Wir standardmäßig geschrieben, wenn ein Thread länger als 20 ms gepinnt ist. Allerdings nur mit dem Standard Profiler! • Sichtbarkeit von Virtual Threads mit dem Standard Profiler: Profiling-Events sind vorhanden, Flamegraph-Darstellung möglich, Thread-Liste nur native Threads in JMC 8.3 • Sichtbarkeit von Virtual Threads mit dem Async Profiler: Aktuell nur native Threads in den Events sichtbar, Flamegraph-Darstellung möglich CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 24 JFR mit Virtual Threads mit JDK 21 Beispiele https://github.com/async-profiler/async-profiler/issues/802

Slide 25

Slide 25 text

CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 25 Performance-Engpässe finden mit dem Java Flight Recorder Motivation 1 Fähigkeiten des Java Flight Recorders 2 Werkzeuge 3 Zusammenfassung 4

Slide 26

Slide 26 text

• Je nach Umgebung steht der normale und der asynchrone Profiler zur Verfügung • Beide Werkzeuge liefern verschiedene Informationen zu ähnlichen Anwendungszwecken • Bereitet eure Produktions- und Staging-Umgebungen auf JFR und Profiling vor • Unterstützung von Virtual Threads noch nicht vollständig CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 26 Zusammenfassung https://github.com/async-profiler/async-profiler/issues/802

Slide 27

Slide 27 text

Java CLI für JFR Recordings https://docs.oracle.com/en/java/javase/21/docs/specs/man/java.html Java Mission Control https://docs.oracle.com/en/java/java-components/jdk-mission-control/ Async Profiler https://github.com/async-profiler/async-profiler Cryostat – JFR for Containerized Java Applications https://cryostat.io/ IntelliJ Ultimate – Profiling Tutorial https://www.jetbrains.com/help/idea/tutorial-get-started-with-profiling.html#optimize Links CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 27 @ahus1de @[email protected]

Slide 28

Slide 28 text

Kontakt Alexander Schwartz Principal Software Engineer [email protected] https://www.ahus1.de @ahus1de @[email protected] CC BY-NC-SA 4.0 | Oktober 2023 | Performance-Engpässe finden mit dem Java Flight Recorder | Alexander Schwartz 28