The session will start with a quick introduction to the theory of profiling discussing the motivations, explaining the different types of profiling and visualization format while listing the tools available for this purpose. This also includes some tooling for reliably emulating the load generation and validating the improvements.
Then we will guide the attendees through the profiling tools that we want to use throughout the session:
Java VisualVM: https://visualvm.github.io/download.html
Async-profiler: https://github.com/jvm-profiling-tools/async-profiler
JDK Mission Control: https://www.oracle.com/java/technologies/jdk-mission-control.html
JMH: https://github.com/openjdk/jmh
Hyperfoil: https://hyperfoil.io/ (for load generation)
Then we will put these tools at work in a practical real-world scenario. We will provide a sample Quarkus-based Java webapp, using a simple but realistic technology stack, having different performance issues involving excessive memory allocation, CPU consumption, slow blocking I/O, locks contention and cache misses. We will demonstrate how to use the before mentioned profiling tools to discover, investigate, fix and verify these issues.