$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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)

    View Slide

  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)

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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.”

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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]

    View Slide

  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

    View Slide