Slide 1

Slide 1 text

Continuous Performance Regression Testing With JfrUnit Gunnar Morling Software Engineer, Red Hat @gunnarmorling

Slide 2

Slide 2 text

#JfrUnit @gunnarmorling Today’s Objective: Learn about... 1. Implementing performance regression tests with JDK Flight Recorder and JfrUnit 2. Analyzing performance regressions in JDK Mission Control 3. Emitting JFR events from 3rd party libraries

Slide 3

Slide 3 text

#JfrUnit @gunnarmorling 3 Gunnar Morling ● Open source software engineer at Red Hat ○ Debezium ○ Quarkus ● Spec Lead for Bean Validation 2.0 ● Java Champion ● @gunnarmorling

Slide 4

Slide 4 text

#JfrUnit @gunnarmorling Challenges of Performance Tests ● Tests based on throughput or latency are dependent on specifics of the environment ○ Require production-like set-up ○ Impacted by unrelated concurrent load (e.g. on CI server)

Slide 5

Slide 5 text

#JfrUnit @gunnarmorling ● Assert metrics like memory allocation, or IO ○ Based on JDK Flight Recorder events ○ Failures may indicate a performance regression ● Plain unit tests ● Analyse in JDK Mission Control JfrUnit — Assert Performance Impacting Metrics

Slide 6

Slide 6 text

#JfrUnit @gunnarmorling Tools © James Petts https://flic.kr/p/LgibJR (CC BY-SA 2.0)

Slide 7

Slide 7 text

#JfrUnit @gunnarmorling ● “Troubleshooting, monitoring, and profiling framework embedded into the JVM” ● 150+ built-in event types; custom ones ● Open-source since Java 11 (backported to 8) ● Low overhead, meant for “always-on” ● Accessible via recording files and streaming OpenJDK Flight Recorder

Slide 8

Slide 8 text

#JfrUnit @gunnarmorling https://bestsolution-at.github.io/jfr-doc/ JFR Event Types

Slide 9

Slide 9 text

#JfrUnit @gunnarmorling ● Control, visualize, and analyze JFR recordings ● And more: ○ JMX console ○ heap dump analyzer ○ etc. OpenJDK Mission Control

Slide 10

Slide 10 text

#JfrUnit @gunnarmorling Demo © Wall Boat https://flic.kr/p/Y6zkmX (Pubic Domain)

Slide 11

Slide 11 text

#JfrUnit @gunnarmorling Hello, JfrUnit!

Slide 12

Slide 12 text

#JfrUnit @gunnarmorling ● Robust tests with very fast feedback cycle ○ Independent from environment ○ Proactive identification of issues ● Metrics need solid understanding; e.g. increased allocation may or may not be a problem ● Cannot identify all issues, e.g. locks showing up only under load ● Won’t help with issues elsewhere, e.g. a bad query execution plan JfrUnit — Discussion and Limitations

Slide 13

Slide 13 text

#JfrUnit @gunnarmorling Wrap-Up © Maria Eklind https://flic.kr/p/251HmVw (CC BY-SA 2.0)

Slide 14

Slide 14 text

#JfrUnit @gunnarmorling ● JfrUnit: a tool in the performance testing box ○ Complement - no replacement - for other tests ● JMC Agent: produce events from code not under your control ● Move beyond Java 1.8 🚀 Take Aways

Slide 15

Slide 15 text

#JfrUnit @gunnarmorling https://horreum.hyperfoil.io/ Outlook — Keeping Track of Historic Values

Slide 16

Slide 16 text

#JfrUnit @gunnarmorling ● JfrUnit https://github.com/moditect/jfrunit ● Introduction to JfrUnit https://www.morling.dev/blog/towards-continuous-performance-regression- testing/ ● Introduction to JMC Agent https://developers.redhat.com/blog/2020/10/29/collect-jdk-flight-recorder -events-at-runtime-with-jmc-agent/ ● Profiling Java inside containers with ContainerJFR https://developers.redhat.com/devnation/tech-talks/containerjfr Resources

Slide 17

Slide 17 text

#JfrUnit @gunnarmorling Q&A [email protected] @gunnarmorling 📧

Slide 18

Slide 18 text

No content