understanding jvm
DESCRIPTION
Introduction to JVM memory structure and reasons for different OutOfMemoryError.TRANSCRIPT
Understanding JVMAparna Chaudhary
Friday, October 4, 13
What’s inside my VM?
VM Memory
VM Memory
Friday, October 4, 13
What’s inside my VM?
VM Memory
Guest OS Memory
VM Memory
Guest OS Memory
Friday, October 4, 13
What’s inside my VM?
VM Memory
Guest OS Memory
JVM Memory
VM Memory
Guest OS Memory
JVM Memory
Friday, October 4, 13
What’s inside my VM?
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPerm
Size
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPerm
Size
Friday, October 4, 13
What’s inside my VM?
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per ThreadVM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
Friday, October 4, 13
What’s inside my VM?
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
HEAP
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
HEAP
Friday, October 4, 13
What’s inside my VM?
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
HEAP
Initial-Xms
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
HEAP
Initial-Xms
Friday, October 4, 13
What’s inside my VM?
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
HEAP
Initial-Xms
-Xmx
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
HEAP
Initial-Xms
-Xmx
Friday, October 4, 13
Exception in thread "main": java.lang.OutOfMemoryError: Java heap space
Exception in thread "main": java.lang.OutOfMemoryError: PermGen space
Exception in thread "main": java.lang.OutOfMemoryError: GC overhead limit exceeded
Exception in thread "main": java.lang.OutOfMemoryError: Unable to create new native thread
and more...
OutOfMemoryError
Friday, October 4, 13
Exception in thread "main": java.lang.OutOfMemoryError: PermGen Space
OutOfMemoryError
Friday, October 4, 13
Perm Gen Space
Used for Storing the JVM’s internal representation of Java Classes
Friday, October 4, 13
Life of a class
described by
loaded by
references
references
Object
Class
Classloader
described by
loaded by
references
references
Object
Class
Classloader
Friday, October 4, 13
Life of a class
described by
loaded by
references
references
Object
Class
Classloader
references
described by
loaded by
references
references
Object
Class
Classloader
references
Friday, October 4, 13
Life of a class
Object
Class
Classloader1
references
referencesObject
Class
Classloader2
references
references
Object
Class
Classloader1
references
referencesObject
Class
Classloader2
references
references
Friday, October 4, 13
Life of a class
Object
Class
Classloader1
references
referencesObject
Class
Classloader2
references
references
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Object
Class
Classloader1
references
referencesObject
Class
Classloader2
references
references
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Friday, October 4, 13
Life of a class
Object
Class
Classloader1
references
referencesObject
Class
Classloader2
references
references
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Object
Class
Classloader1
references
referencesObject
Class
Classloader2
references
references
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Class
Friday, October 4, 13
OOM - PermGen
This occurs when JVM wants to load new class definitions; but there is not enough space in PermGen space
Friday, October 4, 13
OOM - PermGen
SymptomAt server startup
CauseBigger PermGen footprint
ResolutionIncrease PermGen capacity -XX:MaxPermSize
Friday, October 4, 13
OOM - PermGen
SymptomPermGen space increases gradually
CausePossible classloader leak
ResolutionInvestigate any third party API you are using for any potential class loader leak defect
Friday, October 4, 13
OOM - PermGen
SymptomOOM after deploy-redeploy cycles
CausePossible classloader leak in the App Server
ResolutionSomeone should fix it for you. Hmm..where is EAP?
Friday, October 4, 13
OutOfMemoryError
Exception in thread "main": java.lang.OutOfMemoryError: GC overhead limit exceeded
Friday, October 4, 13
OOM - GC overhead limit exceeded
Policy to allow the VM to detect potential OutOfMemoryError conditions earlier and before it runs out of Java Heap space.
Can be turned off -XX:-UseGCOverheadLimit
But don’t!
Friday, October 4, 13
OOM - GC overhead limit exceeded
When is this error triggered?
✓Too many Full GC iterations✓Too much time spent in GC
Friday, October 4, 13
Exception in thread "main": java.lang.OutOfMemoryError: Unable to create new native thread
OutOfMemoryError
Friday, October 4, 13
OOM - Unable to create new native thread
JVM is asking a new thread from the OS and the underlying OS cannot allocate a new thread anymore.
Friday, October 4, 13
Why?
VM Memory
Guest OS Memory
JVM Memory
PermGen-XX:MaxPermSize
Stack-XSS Per Thread
HEAP
Initial-Xms
-Xmx
not enough stack space
Friday, October 4, 13
OOM - Unable to create new native thread
✓Check ulimit - process limit✓Consider using thread-pools✓Reduce heap space or perform vertical scaling
Friday, October 4, 13
Exception in thread "main": java.lang.OutOfMemoryError: Java heap space
OutOfMemoryError
Friday, October 4, 13
JVM Heap Structure
Eden S0 S1 Tenured
Old Generation
YoungGeneration
SurvivorSpace
Friday, October 4, 13
Eden
To From
Survivor Spaces
Object Allocation
Young Gen = Eden + Survivor SpacesFriday, October 4, 13
Eden
To From
Survivor Spaces
Just allocatedare allocated in Eden
Object Allocation
Young Gen = Eden + Survivor SpacesFriday, October 4, 13
Eden
To From
Survivor Spaces
Filling up Eden Space
Friday, October 4, 13
Eden
To From
Survivor Spaces
Just allocatedare allocated in Eden
Filling up Eden Space
Friday, October 4, 13
Minor GC - Copy referenced objects
Eden
To From
Survivor Spaces Unreferenced
Referenced
Friday, October 4, 13
Minor GC - Copy referenced objects
Eden
To From
Survivor Spaces Unreferenced
Referenced
Friday, October 4, 13
Minor GC - Copy referenced objects
Eden
To From
Survivor Spaces Unreferenced
Referenced
Friday, October 4, 13
Minor GC - Copy referenced objects
Eden
To From
Survivor Spaces Unreferenced
Referenced
1 1 1 1
Friday, October 4, 13
Next Minor GC - Object Aging
Eden
From To
Survivor Spaces Unreferenced
Referenced
1 1 1 1
Friday, October 4, 13
Next Minor GC - Object Aging
Eden
From To
Survivor Spaces Unreferenced
Referenced
1 1 1 1
Friday, October 4, 13
Next Minor GC - Object Aging
Eden
From To
Survivor Spaces Unreferenced
Referenced
1 1
Friday, October 4, 13
Next Minor GC - Object Aging
Eden
From To
Survivor Spaces Unreferenced
Referenced
1 2
Friday, October 4, 13
Next Minor GC - Object Aging
Eden
From To
Survivor Spaces Unreferenced
Referenced
2 2
Friday, October 4, 13
Next Minor GC - Object Aging
Eden
From To
Survivor Spaces Unreferenced
Referenced
2 2 1
Friday, October 4, 13
Next Minor GC - Object Aging
Eden
From To
Survivor Spaces Unreferenced
Referenced
2 2 1 1
Friday, October 4, 13
Next Minor GC - Additional Aging
Eden
To From
Survivor Spaces Unreferenced
Referenced
2 2 1 1
Friday, October 4, 13
Next Minor GC - Additional Aging
Eden
To From
Survivor Spaces Unreferenced
Referenced
2 1
Friday, October 4, 13
Next Minor GC - Additional Aging
Eden
To From
Survivor Spaces Unreferenced
Referenced
321
Friday, October 4, 13
Next Minor GC - Promotion
Eden
From To
Survivor Spaces
Unreferenced
Referenced
3211 14
Tenured
Friday, October 4, 13
Next Minor GC - Promotion
Eden
From To
Survivor Spaces
Unreferenced
Referenced
3211
14Tenured
Friday, October 4, 13
Major GC
Eden
From To
Survivor Spaces
Unreferenced
Referenced
3211 1
Tenured
Friday, October 4, 13
Major GC
Eden
From To
Survivor Spaces
Unreferenced
Referenced
3211 1
Tenured
Friday, October 4, 13
Warning!
This knowledge does not make us JVM experts!
Always focus first on software before hacking JVM.
Friday, October 4, 13
JVM Diagnosis
jmap
jhat
Friday, October 4, 13
Class Histogram
jmap -F -histo `pgrep java`
Make it a practice to proactively use this command after a load test and endurance test.
Friday, October 4, 13
Heap Dump
jmap [ option ] <pid>
jmap -F -dump:live,format=b,file=/var/opt/jboss-as/tmp/io/heapdump.hprof `pgrep java`http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
Friday, October 4, 13
What Next?
Demo
VisualVM
Eclipse Memory Analyzer Tool
Other tools and commands
GC Algorithms (Optional)
Friday, October 4, 13