Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Performance-Engpässe finden mit dem Java-Flight-Recorder

Performance-Engpässe finden mit dem Java-Flight-Recorder

Die Software funktioniert. Aber wenn mehrere Personen gleichzeitig mit der Anwendung arbeiten, geht es nur noch im Schneckentempo voran?

Die aktuellen Java-Versionen haben mit dem Java Flight Recorder ein Werkzeug an Bord, mit dem man den Ursachen auf die Schliche kommen kann. Mit dem Async-Profiler kann je nach Umgebung der Profiling-Overhead noch einmal reduziert und mit eigenen Events können die Informationen weiter angereichert werden.

Der Vortrag zeigt anhand von Beispielen, wie das in der lokalen Entwicklungsumgebung und in Container-Umgebungen wie Kubernetes funktioniert.

Alexander Schwartz

October 04, 2023
Tweet

More Decks by Alexander Schwartz

Other Decks in Programming

Transcript

  1. Performance-Engpässe finden mit dem Java Flight Recorder Alexander Schwartz, Principal

    Software Engineer @ Red Hat betterCode() Java | 2023-10-04
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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.
  7. 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.
  8. 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.
  9. 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)
  10. 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)
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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.”
  23. 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
  24. • 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
  25. 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
  26. • 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
  27. 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]
  28. 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