Slide 1

Slide 1 text

Understanding JVM Aparna Chaudhary Friday, October 4, 13

Slide 2

Slide 2 text

What’s inside my VM? VM Memory VM Memory Friday, October 4, 13

Slide 3

Slide 3 text

What’s inside my VM? VM Memory Guest OS Memory VM Memory Guest OS Memory Friday, October 4, 13

Slide 4

Slide 4 text

What’s inside my VM? VM Memory Guest OS Memory JVM Memory VM Memory Guest OS Memory JVM Memory Friday, October 4, 13

Slide 5

Slide 5 text

What’s inside my VM? VM Memory Guest OS Memory JVM Memory PermGen -XX:MaxPermSize VM Memory Guest OS Memory JVM Memory PermGen -XX:MaxPermSize Friday, October 4, 13

Slide 6

Slide 6 text

What’s inside my VM? VM Memory Guest OS Memory JVM Memory PermGen -XX:MaxPermSize Stack -XSS Per Thread VM Memory Guest OS Memory JVM Memory PermGen -XX:MaxPermSize Stack -XSS Per Thread Friday, October 4, 13

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Exception in thread "main": java.lang.OutOfMemoryError: PermGen Space OutOfMemoryError Friday, October 4, 13

Slide 12

Slide 12 text

Perm Gen Space Used for Storing the JVM’s internal representation of Java Classes Friday, October 4, 13

Slide 13

Slide 13 text

Life of a class described by loaded by references references Object Class Classl oader described by loaded by references references Object Class Classl oader Friday, October 4, 13

Slide 14

Slide 14 text

Life of a class described by loaded by references references Object Class Classl oader references described by loaded by references references Object Class Classl oader references Friday, October 4, 13

Slide 15

Slide 15 text

Life of a class Object Class Classloader1 references references Object Class Classloader2 references references Object Class Classloader1 references references Object Class Classloader2 references references Friday, October 4, 13

Slide 16

Slide 16 text

Life of a class Object Class Classloader1 references references Object 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 references Object 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

Slide 17

Slide 17 text

Life of a class Object Class Classloader1 references references Object 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 references Object 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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

OOM - PermGen Symptom At server startup Cause Bigger PermGen footprint Resolution Increase PermGen capacity -XX:MaxPermSize Friday, October 4, 13

Slide 20

Slide 20 text

OOM - PermGen Symptom PermGen space increases gradually Cause Possible classloader leak Resolution Investigate any third party API you are using for any potential class loader leak defect Friday, October 4, 13

Slide 21

Slide 21 text

OOM - PermGen Symptom OOM after deploy-redeploy cycles Cause Possible classloader leak in the App Server Resolution Someone should fix it for you. Hmm..where is EAP? Friday, October 4, 13

Slide 22

Slide 22 text

OutOfMemoryError Exception in thread "main": java.lang.OutOfMemoryError: GC overhead limit exceeded Friday, October 4, 13

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Exception in thread "main": java.lang.OutOfMemoryError: Unable to create new native thread OutOfMemoryError Friday, October 4, 13

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Exception in thread "main": java.lang.OutOfMemoryError: Java heap space OutOfMemoryError Friday, October 4, 13

Slide 30

Slide 30 text

JVM Heap Structure Eden S0 S1 Tenured Old Generation Young Generation Survivor Space Friday, October 4, 13

Slide 31

Slide 31 text

Eden To From Survivor Spaces Object Allocation Young Gen = Eden + Survivor Spaces Friday, October 4, 13

Slide 32

Slide 32 text

Eden To From Survivor Spaces Just allocated are allocated in Eden Object Allocation Young Gen = Eden + Survivor Spaces Friday, October 4, 13

Slide 33

Slide 33 text

Eden To From Survivor Spaces Filling up Eden Space Friday, October 4, 13

Slide 34

Slide 34 text

Eden To From Survivor Spaces Just allocated are allocated in Eden Filling up Eden Space Friday, October 4, 13

Slide 35

Slide 35 text

Minor GC - Copy referenced objects Eden To From Survivor Spaces Unreferenced Referenced Friday, October 4, 13

Slide 36

Slide 36 text

Minor GC - Copy referenced objects Eden To From Survivor Spaces Unreferenced Referenced Friday, October 4, 13

Slide 37

Slide 37 text

Minor GC - Copy referenced objects Eden To From Survivor Spaces Unreferenced Referenced Friday, October 4, 13

Slide 38

Slide 38 text

Minor GC - Copy referenced objects Eden To From Survivor Spaces Unreferenced Referenced 1 1 1 1 Friday, October 4, 13

Slide 39

Slide 39 text

Next Minor GC - Object Aging Eden From To Survivor Spaces Unreferenced Referenced 1 1 1 1 Friday, October 4, 13

Slide 40

Slide 40 text

Next Minor GC - Object Aging Eden From To Survivor Spaces Unreferenced Referenced 1 1 1 1 Friday, October 4, 13

Slide 41

Slide 41 text

Next Minor GC - Object Aging Eden From To Survivor Spaces Unreferenced Referenced 1 1 Friday, October 4, 13

Slide 42

Slide 42 text

Next Minor GC - Object Aging Eden From To Survivor Spaces Unreferenced Referenced 1 2 Friday, October 4, 13

Slide 43

Slide 43 text

Next Minor GC - Object Aging Eden From To Survivor Spaces Unreferenced Referenced 2 2 Friday, October 4, 13

Slide 44

Slide 44 text

Next Minor GC - Object Aging Eden From To Survivor Spaces Unreferenced Referenced 2 2 1 Friday, October 4, 13

Slide 45

Slide 45 text

Next Minor GC - Object Aging Eden From To Survivor Spaces Unreferenced Referenced 2 2 1 1 Friday, October 4, 13

Slide 46

Slide 46 text

Next Minor GC - Additional Aging Eden To From Survivor Spaces Unreferenced Referenced 2 2 1 1 Friday, October 4, 13

Slide 47

Slide 47 text

Next Minor GC - Additional Aging Eden To From Survivor Spaces Unreferenced Referenced 2 1 Friday, October 4, 13

Slide 48

Slide 48 text

Next Minor GC - Additional Aging Eden To From Survivor Spaces Unreferenced Referenced 3 2 1 Friday, October 4, 13

Slide 49

Slide 49 text

Next Minor GC - Promotion Eden From To Survivor Spaces Unreferenced Referenced 3 2 1 1 14 Tenured Friday, October 4, 13

Slide 50

Slide 50 text

Next Minor GC - Promotion Eden From To Survivor Spaces Unreferenced Referenced 3 2 1 1 14 Tenured Friday, October 4, 13

Slide 51

Slide 51 text

Major GC Eden From To Survivor Spaces Unreferenced Referenced 3 2 1 1 1 Tenured Friday, October 4, 13

Slide 52

Slide 52 text

Major GC Eden From To Survivor Spaces Unreferenced Referenced 3 2 1 1 1 Tenured Friday, October 4, 13

Slide 53

Slide 53 text

Warning! This knowledge does not make us JVM experts! Always focus first on software before hacking JVM. Friday, October 4, 13

Slide 54

Slide 54 text

JVM Diagnosis jmap jhat Friday, October 4, 13

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

Heap Dump jmap [ option ] 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

Slide 57

Slide 57 text

What Next? Demo VisualVM Eclipse Memory Analyzer Tool Other tools and commands GC Algorithms (Optional) Friday, October 4, 13