(JVM) Garbage Collection - Brown Bag Session

58
(JVM) Garbage Collection & Co. Brown Bag Session Jens Hadlich 2015-12-08

Transcript of (JVM) Garbage Collection - Brown Bag Session

Page 1: (JVM) Garbage Collection - Brown Bag Session

(JVM) Garbage Collection & Co.

Brown Bag Session

Jens Hadlich 2015-12-08

Page 2: (JVM) Garbage Collection - Brown Bag Session

Garbage Collection

2

Page 3: (JVM) Garbage Collection - Brown Bag Session

Why should I care?

Page 4: (JVM) Garbage Collection - Brown Bag Session

Garbage Collection

4

Can have a huge impact

30 seconds

20 seconds

10 seconds

~16 hours

Page 5: (JVM) Garbage Collection - Brown Bag Session

Outline

•  Some Theory

•  Practice & real world examples

•  Tools & live demos

•  Configuration best practices

•  Discussion

5

Page 6: (JVM) Garbage Collection - Brown Bag Session

Some Theory

Page 7: (JVM) Garbage Collection - Brown Bag Session

Garbage Collection

7

Page 8: (JVM) Garbage Collection - Brown Bag Session

Garbage Collection

8

Page 9: (JVM) Garbage Collection - Brown Bag Session

Terminology

Garbage collection … is a form of automatic memory management.

Garbage … memory occupied by objects that are no longer used.

9

Page 10: (JVM) Garbage Collection - Brown Bag Session

Pros and Cons

Pros -  Programmer does not need to worry about memory (de-)allocation

(leading to fewer memory leaks)

Cons -  Performance overhead -  Can lead to more complex programming language design

10

Page 11: (JVM) Garbage Collection - Brown Bag Session

More Terminology

Collector Heap Mutator Roots

11

Page 12: (JVM) Garbage Collection - Brown Bag Session

Roots

12

Page 13: (JVM) Garbage Collection - Brown Bag Session

Garbage Collection

Algorithms

13

Tracing Reference Counting

Collection Style Batch Incremental

Cost Per Mutation None High

Throughput High Low

Pause Times Long Short

Real Time? No Yes

Collects Cycles? Yes No

Page 14: (JVM) Garbage Collection - Brown Bag Session

Tracing algorithms

Mark & Sweep Copying

14

Page 15: (JVM) Garbage Collection - Brown Bag Session

Think of a bookshelf

15

Page 16: (JVM) Garbage Collection - Brown Bag Session

Tracing algorithms

Mark & Sweep Copying

16

Page 17: (JVM) Garbage Collection - Brown Bag Session

Mark & Sweep

Mark the books you want to keep

17

Page 18: (JVM) Garbage Collection - Brown Bag Session

Mark & Sweep

Throw away the books that you don’t want to keep

18

Page 19: (JVM) Garbage Collection - Brown Bag Session

Mark & Sweep

Problem: Fragmentation

19

This size book won’t fit!

Page 20: (JVM) Garbage Collection - Brown Bag Session

Tracing algorithms

Mark & Sweep Copying

20

Page 21: (JVM) Garbage Collection - Brown Bag Session

Copying

Need 2 shelves

21

Page 22: (JVM) Garbage Collection - Brown Bag Session

Copying

Move (“copy”) books you want to keep

22

Page 23: (JVM) Garbage Collection - Brown Bag Session

Copying

Throw away books you don’t want to keep

23

Page 24: (JVM) Garbage Collection - Brown Bag Session

Further readings

24

Page 25: (JVM) Garbage Collection - Brown Bag Session

Java

Page 26: (JVM) Garbage Collection - Brown Bag Session

HotSpot JVM Architecture

26

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

Page 27: (JVM) Garbage Collection - Brown Bag Session

Java

27

Metaspace (Java 8 and later)

(Java 7 and earlier)

Page 28: (JVM) Garbage Collection - Brown Bag Session

Java

Generational Garbage Collection

28

Hypothesis: Most objects die young

Page 29: (JVM) Garbage Collection - Brown Bag Session

Generational Garbage Collection

29

Page 30: (JVM) Garbage Collection - Brown Bag Session

Tools & Practice

Page 31: (JVM) Garbage Collection - Brown Bag Session

Garbage Collection

Tools (Memory Analyzer) Java VisualVM jClarity Censum Grafana Icinga

31

Page 32: (JVM) Garbage Collection - Brown Bag Session

A little bit of GC Tuning

Page 33: (JVM) Garbage Collection - Brown Bag Session

GC Tuning

Performance Triangle

33

Memory Footprint

Throughput Latency

M

T L

Page 34: (JVM) Garbage Collection - Brown Bag Session

GC Tuning

Better Performance Triangle

34

Compactness

Throughput Responsiveness

C

T R

C x T x R = a Optimization: Increase a

Page 35: (JVM) Garbage Collection - Brown Bag Session

Responsiveness vs. Throughput

35

Page 36: (JVM) Garbage Collection - Brown Bag Session

Collectors

Collectors (new generation) -XX:+UseSerialGC (Copy) -XX:+UseParNewGC (used together with old gen CMS) -XX:+UseG1GC (same for old gen)

36

Page 37: (JVM) Garbage Collection - Brown Bag Session

Collectors

Collectors (old generation) Throughput: -XX:+UseSerialGC (MarkSweepCompact) -XX:+UseParallelGC -XX:+UseParallelOldGC Low-pause: -XX:+UseConcMarkSweepGC -XX:+UseG1GC

37

Page 38: (JVM) Garbage Collection - Brown Bag Session

Concurrent Mark-Sweep

38

Page 39: (JVM) Garbage Collection - Brown Bag Session

Fun with JVM Options

39

Page 40: (JVM) Garbage Collection - Brown Bag Session

Fun with JVM Options

Most important -server Crucial for all long-running server applications. http://stackoverflow.com/questions/198577/real-differences-between-java-server-and-java-client

40

Page 41: (JVM) Garbage Collection - Brown Bag Session

Fun with JVM Options

Most important (cont’d) -Xms (-XX:InitialHeapSize) -Xmx (-XX:MaxHeapSize) Setting Xms = Xmx (slightly) saves some overhead.

41

Page 42: (JVM) Garbage Collection - Brown Bag Session

Fun with JVM Options

Enable GC logs -Xloggc:logs/gc-<app>.log -XX:+PrintGCCause -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=2 -XX:GCLogFileSize=128M

42

Page 43: (JVM) Garbage Collection - Brown Bag Session

Fun with JVM Options

Enable JMX remoting -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

43

Page 44: (JVM) Garbage Collection - Brown Bag Session

Think about your program

https://flink.apache.org/news/2015/05/11/Juggling-with-Bits-and-Bytes.html

44

Page 45: (JVM) Garbage Collection - Brown Bag Session

Best practices

Page 46: (JVM) Garbage Collection - Brown Bag Session

Best practices

“Good” JVM options to start with -server -Xms1g -Xmx1g -XX:+AlwaysPreTouch -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+DisableExplicitGC

46

Page 47: (JVM) Garbage Collection - Brown Bag Session

Best practices

Notes on G1GC -XX:+UseG1GC http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html (G1GC shall become the default collector in Java 9)

47

Page 48: (JVM) Garbage Collection - Brown Bag Session

Best practices

“Good” JVM options to start with (G1GC) -server -Xms1g -Xmx1g -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+DisableExplicitGC

48

Page 49: (JVM) Garbage Collection - Brown Bag Session

Best practices

Keep the heap size below 30 GB if possible. Why? Compressed oops. https://wiki.openjdk.java.net/display/HotSpot/CompressedOops http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html (enabled by default since Java 7 for 64-bit)

49

Page 50: (JVM) Garbage Collection - Brown Bag Session

Best practices

Look out for specific tuning guides / recommendations. https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html

50

Page 51: (JVM) Garbage Collection - Brown Bag Session

The End?

Page 52: (JVM) Garbage Collection - Brown Bag Session

The End?

Other things that can go wrong.

Page 53: (JVM) Garbage Collection - Brown Bag Session

Linux OOM Killer

53

System (3GB memory)

JVM (Xmx=2g)

/var/log/kern.log jvm.memory.total.used

Page 54: (JVM) Garbage Collection - Brown Bag Session

OOM

54

hs_err_pid<pid>.log

Page 55: (JVM) Garbage Collection - Brown Bag Session

Questions?

Page 56: (JVM) Garbage Collection - Brown Bag Session

Add-on slides

Page 57: (JVM) Garbage Collection - Brown Bag Session

Go

57

Page 58: (JVM) Garbage Collection - Brown Bag Session

Java Profiling

58