SlideShare a Scribd company logo
JVM Profiling
Under da Hood
Richard Warburton - @RichardWarburto
Nitsan Wakart - @nitsanw
Why Profile?
Lies, Damn Lies and Statistical Profiling
Under the Hood
Conclusion
Jvm profiling under the hood
Jvm profiling under the hood
Measure data from your application
Exploratory Profiling
Execution Profiling
=
Where in code is my application
spending time?
CPU Profiling Limitations
● Finds CPU bound bottlenecks
● Many problems not CPU Bound
○ Networking
○ Database or External Service
○ I/O
○ Garbage Collection
○ Insufficient Parallelism
○ Blocking & Queuing Effects
Why Profile?
Lies, Damn Lies and Statistical Profiling
Under the Hood
Conclusion
Jvm profiling under the hood
Different Execution Profilers
● Instrumenting
○ Adds timing code to application
● Sampling
○ Collects thread dumps periodically
Sampling Profilers
WebServerThread.run()
Controller.doSomething() Controller.next()
Repo.readPerson()
new Person()
View.printHtml()
Periodicity Bias
● Bias from sampling at a fixed interval
● Periodic operations with the same frequency
as the samples
● Timed operations
Periodicity Bias
a() ??? a() ??? a() ??? a() ???
Stack Trace Sampling
● JVMTI interface: GetCallTrace
○ Trigger a global safepoint(not on Zing)
○ Collect stack trace
● Large impact on application
● Samples only at safepoints
Example
private static void outer()
{
for (int i = 0; i < OUTER; i++)
{
hotMethod(i);
}
}
// https://github.com/RichardWarburton/profiling-samples
Example (2)
private static void hotMethod(final int i)
{
for (int k = 0; k < N; k++)
{
final int[] array = SafePointBias. array;
final int index = i % SIZE;
for (int j = index; j < SIZE; j++)
{
array[index] += array[j];
}
}
}
Jvm profiling under the hood
-XX:+PrintSafepointStatistics
ThreadDump 48
Maximum sync time 985 ms
Whats a safepoint?
● Java threads poll global flag
○ At ‘uncounted’ loops back edge
○ At method exit/enter
● A safepoint poll can be delayed by:
○ Large methods
○ Long running ‘counted’ loops
○ BONUS: Page faults/thread suspension
Jvm profiling under the hood
Safepoint Bias
WebServerThread.run()
Controller.doSomething() Controller.next()
Repo.readPerson()
new Person()
View.printHtml() ???
Jvm profiling under the hood
Let sleeping dogs lie?
● ‘GetCallTrace’ profilers will sample ALL
threads
● Even sleeping threads...
This Application Mostly Sleeps
JVisualVM snapshot
No CPU? No profile!
JMC profile
Why Profile?
Lies, Damn Lies and Statistical Profiling
Under the Hood
Conclusion
Honest Profiler
https://github.com/richardwarburton/honest-profiler
Jvm profiling under the hood
AsyncGetCallTrace
● Used by Oracle Solaris Studio
● Adapted to open source prototype by
Google’s Jeremy Manson
● Unsupported, Undocumented …
Underestimated
SIGPROF - Interrupt Handlers
● OS Managed timing based interrupt
● Interrupts the thread and directly calls an
event handler
● Used by profilers we’ll be talking about
Design
Log File
Processor
Thread Graphical UI
Console UI
Signal
Handler
Signal
Handler
Os Timer Thread
“You are in a maze of twisty little stack frames,
all alike”
AsyncGetCallTrace under the hood
● A Java thread is ‘possessed’
● You have the PC/FP/SP
● What is the call trace?
○ jmethodId - Java Method Identifier
○ bci - Byte Code Index -> used to find line number
Where Am I?
● Given a PC what is the current method?
● Is this a Java method?
○ Each method ‘lives’ in a range of addresses
● If not, what do we do?
Java Method? Which line?
● Given a PC, what is the current line?
○ Not all instructions map directly to a source line
● Given super-scalar CPUs what does PC
mean?
● What are the limits of PC accuracy?
“> I think Andi mentioned this to me last year --
> that instruction profiling was no longer reliable.
It never was.”
http://permalink.gmane.org/gmane.linux.kernel.perf.user/1948
Exchange between Brenden Gregg and Andi Kleen
Skid
● PC indicated will be >= to PC at sample time
● Known limitation of instruction profiling
● Leads to harder ‘blame analysis’
Limits of line number accuracy:
Line number (derived from BCI) is the closest
attributable BCI to the PC (-XX:+DebugNonSafepoint)
The PC itself is within some skid distance from
actual sampled instruction
● Divided into frames
○ frame { sender*, stack*, pc }
● A single linked list:
root(null, s0, pc1) <- call1 (root, s1, pc2) <- call2(call1, s2, pc2)
● Convert to: (jmethodId,lineno)
The Stack
A typical stack
● JVM Thread runner infra:
○ JavaThread::run to JavaCalls::call_helper
● Interleaved Java frames:
○ Interpreted
○ Compiled
○ Java to Native and back
● Top frame may be Java or Native
Native frames
● Ignored, but need to navigate through
● Use a dedicated FP register to find sender
● But only if compiled to do so…
● Use a last remembered Java frame instead
See: http://duartes.org/gustavo/blog/post/journey-to-the-stack/
Java Compiled Frames
● C1/C2 produce native code
● No FP register: use set frame size
● Challenge: methods can move (GC)
● Challenge: methods can get recompiled
Java Interpreter frames
● Separately managed by the runtime
● Make an effort to look like normal frames
● Challenge: may be interrupted half-way
through construction...
Virtual Frames
● C1/C2 inline code (intrinsics/other methods)
● No data on stack
● Must use JVM debug info
AsyncGetCallTrace Limitations
● Only profiles running threads
● Accuracy of line info limited by reality
● Only reports Java frames/threads
● Must lookup debug info during call
Compilers: Friend or Fiend?
void safe_reset(void *start, size_t size) {
char *base = reinterpret_cast<char *>(start);
char *end = base + size;
for (char *p = base; p < end; p++) {
*p = 0;
}
}
Compilers: Friend or Fiend?
safe_reset(void*, unsigned long):
lea rdx, [rdi+rsi]
cmp rdi, rdx
jae .L3
sub rdx, rdi
xor esi, esi
jmp memset
.L3:
rep ret
Concurrency Bug
● Even simple concurrency bugs are hard to
spot
● Unspotted race condition in the ring buffer
● Spotted thanks to open source & Rajiv
Signal
Writer
Reader
Writer
Reader
Extra Credit!
Native Profiling Tools
● Profile native methods
● Profile at the instruction level
● Profile hardware counters
Perf
● A Linux profiling tool
● Can be made to work with Java
● JMH integration
● Ongoing integration efforts
Solaris Studio
● Works on Linux!
● Secret Weapon!
● Give it a go!
ZVision
● Works for Zing
● No HWC support
● Very informative
Why Profile?
Lies, Damn Lies and Statistical Profiling
Under the Hood
Conclusion
What did we cover?
● Biases in Profilers
● More accurate sampling
● Alternative Profiling Approaches
Don’t just blindly trust your tooling.
Test your measuring instruments
Open Source enables implementation review
Q & A
@nitsanw
psy-lob-saw.blogspot.co.uk
@richardwarburto
insightfullogic.com
java8training.com
www.pluralsight.
com/author/richard-
warburton
Slides after here just for reference,
don’t delete or show
Jvm profiling under the hood

More Related Content

What's hot (20)

PDF
Statistical Learning and Text Classification with NLTK and scikit-learn
Olivier Grisel
 
PPTX
java memory management & gc
exsuns
 
PPTX
Fm wtm12-v2
Miguel Gamboa
 
PPTX
opt-mem-trx
Miguel Gamboa
 
PPTX
The Java Memory Model
CA Technologies
 
PPT
Reactive programming with examples
Peter Lawrey
 
PDF
Advanced Spark and TensorFlow Meetup May 26, 2016
Chris Fregly
 
PDF
Java Memory Model
Łukasz Koniecki
 
PPTX
Building High-Performance Language Implementations With Low Effort
Stefan Marr
 
KEY
Know yourengines velocity2011
Demis Bellot
 
PPTX
JVM Memory Model - Yoav Abrahami, Wix
Codemotion Tel Aviv
 
PPT
An Introduction to JVM Internals and Garbage Collection in Java
Abhishek Asthana
 
PPT
Os Reindersfinal
oscon2007
 
PPT
Quantifying the Performance of Garbage Collection vs. Explicit Memory Management
Emery Berger
 
PPTX
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Stefan Marr
 
PDF
Make Your Own Developement Board @ 2014.4.21 JuluOSDev
Jian-Hong Pan
 
PPT
Heap & thread dump
Nishit Charania
 
PDF
JCConf 2018 - Retrospect and Prospect of Java
Joseph Kuo
 
PDF
Attention mechanisms with tensorflow
Keon Kim
 
PDF
NANO266 - Lecture 9 - Tools of the Modeling Trade
University of California, San Diego
 
Statistical Learning and Text Classification with NLTK and scikit-learn
Olivier Grisel
 
java memory management & gc
exsuns
 
Fm wtm12-v2
Miguel Gamboa
 
opt-mem-trx
Miguel Gamboa
 
The Java Memory Model
CA Technologies
 
Reactive programming with examples
Peter Lawrey
 
Advanced Spark and TensorFlow Meetup May 26, 2016
Chris Fregly
 
Java Memory Model
Łukasz Koniecki
 
Building High-Performance Language Implementations With Low Effort
Stefan Marr
 
Know yourengines velocity2011
Demis Bellot
 
JVM Memory Model - Yoav Abrahami, Wix
Codemotion Tel Aviv
 
An Introduction to JVM Internals and Garbage Collection in Java
Abhishek Asthana
 
Os Reindersfinal
oscon2007
 
Quantifying the Performance of Garbage Collection vs. Explicit Memory Management
Emery Berger
 
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Stefan Marr
 
Make Your Own Developement Board @ 2014.4.21 JuluOSDev
Jian-Hong Pan
 
Heap & thread dump
Nishit Charania
 
JCConf 2018 - Retrospect and Prospect of Java
Joseph Kuo
 
Attention mechanisms with tensorflow
Keon Kim
 
NANO266 - Lecture 9 - Tools of the Modeling Trade
University of California, San Diego
 

Similar to Jvm profiling under the hood (20)

PDF
Java Profiling Future
Jaroslav Bachorik
 
PDF
Java Performance & Profiling
Isuru Perera
 
ODP
Make Java Profilers Lie Less
Jaroslav Bachorik
 
PDF
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Ped...
Red Hat Developers
 
PDF
Iurii Antykhovych "Java and performance tools and toys"
LogeekNightUkraine
 
PDF
ContextualContinuous Profilng
Jaroslav Bachorik
 
PDF
Java in flames
Isuru Perera
 
PPTX
Java performance tuning
Jerry Kurian
 
PDF
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Haribabu Nandyal Padmanaban
 
PDF
Java Performance Analysis on Linux with Flame Graphs
Brendan Gregg
 
PDF
JVM Under the Hood
Serkan Özal
 
PDF
Understanding Request Latency with Wallclock Profiling by Richard Startin
ScyllaDB
 
PPTX
The Art of JVM Profiling
Andrei Pangin
 
PDF
HPC Application Profiling and Analysis
Rishi Pathak
 
PPTX
HPC Application Profiling & Analysis
Rishi Pathak
 
PDF
Java black box profiling JUG.EKB 2016
aragozin
 
PDF
Java Runtime: повседневные обязанности JVM
odnoklassniki.ru
 
PDF
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 
PDF
Java Performance and Profiling
WSO2
 
PPTX
Optimizing Java Notes
Adam Feldscher
 
Java Profiling Future
Jaroslav Bachorik
 
Java Performance & Profiling
Isuru Perera
 
Make Java Profilers Lie Less
Jaroslav Bachorik
 
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Ped...
Red Hat Developers
 
Iurii Antykhovych "Java and performance tools and toys"
LogeekNightUkraine
 
ContextualContinuous Profilng
Jaroslav Bachorik
 
Java in flames
Isuru Perera
 
Java performance tuning
Jerry Kurian
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Haribabu Nandyal Padmanaban
 
Java Performance Analysis on Linux with Flame Graphs
Brendan Gregg
 
JVM Under the Hood
Serkan Özal
 
Understanding Request Latency with Wallclock Profiling by Richard Startin
ScyllaDB
 
The Art of JVM Profiling
Andrei Pangin
 
HPC Application Profiling and Analysis
Rishi Pathak
 
HPC Application Profiling & Analysis
Rishi Pathak
 
Java black box profiling JUG.EKB 2016
aragozin
 
Java Runtime: повседневные обязанности JVM
odnoklassniki.ru
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 
Java Performance and Profiling
WSO2
 
Optimizing Java Notes
Adam Feldscher
 
Ad

More from RichardWarburton (20)

PDF
Fantastic performance and where to find it
RichardWarburton
 
PDF
Production profiling what, why and how technical audience (3)
RichardWarburton
 
PDF
Production profiling: What, Why and How
RichardWarburton
 
PDF
Production profiling what, why and how (JBCN Edition)
RichardWarburton
 
PDF
Production Profiling: What, Why and How
RichardWarburton
 
PDF
Java collections the force awakens
RichardWarburton
 
PDF
Generics Past, Present and Future (Latest)
RichardWarburton
 
PDF
Collections forceawakens
RichardWarburton
 
PDF
Generics past, present and future
RichardWarburton
 
PDF
How to run a hackday
RichardWarburton
 
PDF
Generics Past, Present and Future
RichardWarburton
 
PDF
Pragmatic functional refactoring with java 8 (1)
RichardWarburton
 
PDF
Twins: Object Oriented Programming and Functional Programming
RichardWarburton
 
PDF
Pragmatic functional refactoring with java 8
RichardWarburton
 
PDF
Introduction to lambda behave
RichardWarburton
 
PDF
Introduction to lambda behave
RichardWarburton
 
PDF
Performance and predictability
RichardWarburton
 
PDF
Simplifying java with lambdas (short)
RichardWarburton
 
PDF
Twins: OOP and FP
RichardWarburton
 
PDF
Twins: OOP and FP
RichardWarburton
 
Fantastic performance and where to find it
RichardWarburton
 
Production profiling what, why and how technical audience (3)
RichardWarburton
 
Production profiling: What, Why and How
RichardWarburton
 
Production profiling what, why and how (JBCN Edition)
RichardWarburton
 
Production Profiling: What, Why and How
RichardWarburton
 
Java collections the force awakens
RichardWarburton
 
Generics Past, Present and Future (Latest)
RichardWarburton
 
Collections forceawakens
RichardWarburton
 
Generics past, present and future
RichardWarburton
 
How to run a hackday
RichardWarburton
 
Generics Past, Present and Future
RichardWarburton
 
Pragmatic functional refactoring with java 8 (1)
RichardWarburton
 
Twins: Object Oriented Programming and Functional Programming
RichardWarburton
 
Pragmatic functional refactoring with java 8
RichardWarburton
 
Introduction to lambda behave
RichardWarburton
 
Introduction to lambda behave
RichardWarburton
 
Performance and predictability
RichardWarburton
 
Simplifying java with lambdas (short)
RichardWarburton
 
Twins: OOP and FP
RichardWarburton
 
Twins: OOP and FP
RichardWarburton
 
Ad

Recently uploaded (20)

PDF
Trading Volume Explained by CIFDAQ- Secret Of Market Trends
CIFDAQ
 
PDF
Women in Automation Presents: Reinventing Yourself — Bold Career Pivots That ...
DianaGray10
 
PDF
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
PDF
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
PDF
Human-centred design in online workplace learning and relationship to engagem...
Tracy Tang
 
PDF
Shuen Mei Parth Sharma Boost Productivity, Innovation and Efficiency wit...
AWS Chicago
 
PPTX
python advanced data structure dictionary with examples python advanced data ...
sprasanna11
 
PPTX
Machine Learning Benefits Across Industries
SynapseIndia
 
PDF
Bitcoin+ Escalando sin concesiones - Parte 1
Fernando Paredes García
 
PPTX
Top Managed Service Providers in Los Angeles
Captain IT
 
DOCX
TLE9 COOKERY DLL WEEK3 technology and li
jamierha cabaero
 
PPTX
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
PDF
Upskill to Agentic Automation 2025 - Kickoff Meeting
DianaGray10
 
PDF
The Past, Present & Future of Kenya's Digital Transformation
Moses Kemibaro
 
PDF
Lecture A - AI Workflows for Banking.pdf
Dr. LAM Yat-fai (林日辉)
 
PPTX
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
PDF
Productivity Management Software | Workstatus
Lovely Baghel
 
PDF
How a Code Plagiarism Checker Protects Originality in Programming
Code Quiry
 
PDF
Market Wrap for 18th July 2025 by CIFDAQ
CIFDAQ
 
PDF
Arcee AI - building and working with small language models (06/25)
Julien SIMON
 
Trading Volume Explained by CIFDAQ- Secret Of Market Trends
CIFDAQ
 
Women in Automation Presents: Reinventing Yourself — Bold Career Pivots That ...
DianaGray10
 
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
Human-centred design in online workplace learning and relationship to engagem...
Tracy Tang
 
Shuen Mei Parth Sharma Boost Productivity, Innovation and Efficiency wit...
AWS Chicago
 
python advanced data structure dictionary with examples python advanced data ...
sprasanna11
 
Machine Learning Benefits Across Industries
SynapseIndia
 
Bitcoin+ Escalando sin concesiones - Parte 1
Fernando Paredes García
 
Top Managed Service Providers in Los Angeles
Captain IT
 
TLE9 COOKERY DLL WEEK3 technology and li
jamierha cabaero
 
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
Upskill to Agentic Automation 2025 - Kickoff Meeting
DianaGray10
 
The Past, Present & Future of Kenya's Digital Transformation
Moses Kemibaro
 
Lecture A - AI Workflows for Banking.pdf
Dr. LAM Yat-fai (林日辉)
 
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
Productivity Management Software | Workstatus
Lovely Baghel
 
How a Code Plagiarism Checker Protects Originality in Programming
Code Quiry
 
Market Wrap for 18th July 2025 by CIFDAQ
CIFDAQ
 
Arcee AI - building and working with small language models (06/25)
Julien SIMON
 

Jvm profiling under the hood