Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight...

55
1 Daniel Mitterdorfer @dmitterd Java Flight Recorder The Secret Arrow in Your Quiver

Transcript of Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight...

Page 1: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

1

Daniel Mitterdorfer@dmitterd

Java Flight RecorderThe Secret Arrow in Your Quiver

Page 2: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

2

Agenda

Java Flight Recorder: Why and What?1

Demos3

Summary 4

How do I use Java Flight Recorder? 2

Page 3: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

3

Why Java Flight Recorder?Memory: Looks fine...

Page 4: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

4

Why Java Flight Recorder?Memory: … but what’s happening here?

Page 5: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

5

Why Java Flight Recorder?Memory: Why is it happening?

Page 6: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

6

What is Java Flight Recorder?

• Low-overhead sampling profiler

• Originally part of JRockit

• In Oracle JDK since Java 7u40

Page 7: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

77

Page 8: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

8

Java Flight Recorder from 10.000 feet

Your appJIT

GC

Runtime

JFR

jcmd

start / stop

event ring bufferrecording.jfr

profile.jfc

jmc

view

Page 9: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

9

How do I use JFR?

Page 10: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

10

Enabling Flight Recorder

• Start jcmd $PID JFR.start

• Dump

jcmd $PID JFR.dump recording=1 filename=/tmp/rec.jfr

• Stop:

jcmd $PID JFR.stop recording=1

Attach to a running application

Page 11: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

11

Enabling Flight RecorderJVM flags (JDK 8 / 9)

-XX:+UnlockCommercialFeatures-XX:+FlightRecorder

Page 12: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

1212

OR*

* May change in the future: See https://twitter.com/hirt/status/905500198297894912

Page 13: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

13

Avoiding Safepoint BiasJVM flags (JDK 8 / 9)

-XX:+UnlockCommercialFeatures-XX:+FlightRecorder-XX:+UnlockDiagnosticVMOptions-XX:+DebugNonSafepoints

Page 14: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

14

Safepoints?

Page 15: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

15

Safepoints: PurposeWhen the JVM needs to take control...

1. Halt all application threads (“safepoint”)

2. Do housekeeping tasks:‒Garbage Collection

‒Take Thread Dumps

‒Deoptimize code

‒….

3. Let application threads continue

Page 16: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

16

Safepoint Polling*

• JVM “arms” a page in memory (on Linux: mprotect)

• Application threads poll and raise SEGV if page is armed

* specific to JIT-compiled code in OpenJDK: http://hg.openjdk.java.net/jdk9/jdk9/hotspot/file/tip/src/share/vm/runtime/safepoint.cpp

Page 17: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

17

Safepoint Polling: Problems

• Counted loops with int counters (considered “short”-running)

• Some I/O operations: e.g. writing mmapped buffers, System.arrayCopy()

Some operations defer safepoint polls

Page 18: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

18

JVMTI vs AsyncGetCallTraceJVM Tool Interface (JVMTI)

• “Official” interface for debuggers and profilers

• Captures stacks at safepoints

• Used by almost every profiler

Page 19: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

19

JVMTI vs AsyncGetCallTraceAsyncGetCallTrace

• Unofficial API

• Captures stacks at any time

• Used by Java Flight Recorder, Honest Profiler, Oracle Developer Studio

Page 20: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

20

main()

b()

c() c()

JvmtiEnv::GetAllStackTraces()

Safepoint Poll

JVMTI: Safepoint Bias

Page 21: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

21

main()

b()

c()

AsyncGetCallTrace()

AsyncGetCallTrace: No Safepoint Bias

Page 22: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

22

• Sampling profiler → sampling bias

• Sampling can fail:‒GC active‒Code is about to be deoptimized‒Top stack frame is not a Java frame‒...

AsyncGetCallTrace is not a silver bullet

Page 23: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

23

main()

b()

c()

AsyncGetCallTrace()

Sampling Biasc() is “invisible”

Page 24: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

24

Customized Recording SettingsEditing

Page 25: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

25

Customized Recording SettingsUsage

• Stored as *.jfc in ‒$JAVA_HOME/jre/lib/jfr/ (Java 8)‒$JAVA_HOME/lib/jfr/ (Java 9)

• To use memory.jfc:

-XX:StartFlightRecording=settings=memory

Page 26: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

26

Starting a Profiling Recording (Fixed Time)JVM flags (JDK 8 / 9)

-XX:+UnlockCommercialFeatures-XX:+FlightRecorder-XX:+UnlockDiagnosticVMOptions-XX:+DebugNonSafepoints-XX:StartFlightRecording=delay=240s,duration=60s,settings=profile,filename=rec.jfr

Page 27: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

27

Starting a Continuous RecordingJVM flags (JDK 8)

-XX:+UnlockCommercialFeatures-XX:+FlightRecorder-XX:+UnlockDiagnosticVMOptions-XX:+DebugNonSafepoints-XX:StartFlightRecording=defaultrecording=true

Not needed in JDK 9

Page 28: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

28

Low Overhead < 2%

Source: https://www.oracle.com/technetwork/java/javaseproducts/mission-control/java-mission-control-wp-2008279.pdf

Page 29: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

29

Dump a recording at application exitJVM flags (JDK 8)

-XX:+UnlockCommercialFeatures-XX:+FlightRecorder-XX:+UnlockDiagnosticVMOptions-XX:+DebugNonSafepoints-XX:StartFlightRecording=defaultrecording=true-XX:FlightRecorderOptions=disk=true,maxage=0s,maxsize=0,dumponexit=true,dumponexitpath=/rec.jfr

Page 30: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

30

Dump a recording at application exitJVM flags (JDK 9)

-XX:+UnlockCommercialFeatures-XX:+FlightRecorder-XX:+UnlockDiagnosticVMOptions-XX:+DebugNonSafepoints-XX:StartFlightRecording=disk=true,maxage=0s,maxsize=0, dumponexit=true,filename=/rec.jfr

Page 31: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

31

Enabling Flight RecorderFrom Mission Control

Page 32: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

32

Enough talking: Demos

Page 33: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

33

Elasticsearch Cluster

Example Application: ElasticsearchOpen Source Distributed Search Engine

Your Application

Node 1

Node 2

Node 3

HTTP

Page 34: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

34

Key Operations and Metrics

• Adding Documents to the Index: Throughput

• Querying: Latency

Example Application: Elasticsearch

Page 35: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

35

Dev Machine 2

My Usual Setup

Elasticsearch

JFR

Direct LAN Connection

Dev Machine 1

Load Test Driver

Page 36: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

36

Demo: Contention Profilingelastic/elasticsearch#18053

Page 37: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

37

Demo: Contention ProfilingLock Striping

docid #5

Striped Lock

Lock1

Lock2

Lockn

...

hash(5,n)

Page 38: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

38

Page 39: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

39

Demo: Contention ProfilingCollision Probability

Page 40: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

40 Source: https://elasticsearch-benchmarks.elastic.co/classic/

Throughput ComparisonDemo: Contention Profiling

Page 41: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

41

Demo: Allocation Profilingelastic/elasticsearch#23185

Page 42: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

42

Demo: Allocation ProfilingBackground:elastic/elasticsearch#23185

Source: https://elasticsearch-benchmarks.elastic.co/index.html#tracks/nyc-taxis/nightly/1y

Page 43: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

43

Demo: Allocation Profiling

Source: https://elasticsearch-benchmarks.elastic.co/index.html#tracks/nyc-taxis/nightly/1y

Young GC

Old GC

Page 44: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

44

Demo: Allocation ProfilingThread Local Allocation Buffers (TLABs) in the JVM

Eden space

TLABs...

Shared

Page 45: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

45

...

One HTTP Request

Many Buffers - One per read

Demo: Allocation ProfilingBuffers in Netty

Page 46: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

46

Demo: Allocation ProfilingProblem: MTU

• MTU Loopback: 65536 bytes

• MTU Ethernet: 1500 bytes

→ Lower internal buffer sizes

Page 47: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

47 Source: https://elasticsearch-benchmarks.elastic.co/index.html#tracks/nyc-taxis/nightly/1y

Demo: Allocation ProfilingThroughput Comparison

Page 48: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

48 Source: https://elasticsearch-benchmarks.elastic.co/index.html#tracks/nyc-taxis/nightly/1y

Demo: Allocation ProfilingGC Times Comparison

Young GC

Old GC

Page 49: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

49

Summary & Outlook

Page 50: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

50

JFR: A versatile tool

• Commercial extension of Oracle JDK

• Low overhead, customizable profiles

• Profiling and Continuous Mode

• Analyze various performance issues: CPU, Memory, Locking, ...

Page 51: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

51

JFR and JDK 9

• JDK 9 brings a new version of Mission Control

• Flight recording also produced on crashes (e.g. OOME)

• Adds supported APIs‒Create your own events

‒Parse flight recordings

• More events available

Source: https://www.jug.ch/events/slides/170215_SwissJUG2017_zurich_sneakpeek.pdf

Page 52: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

52

References and Further Reading

• AsyncGetCallTrace: http://psy-lob-saw.blogspot.de/2016/06/the-pros-and-cons-of-agct.html

• Safepoints and Safepoint Bias‒http://psy-lob-saw.blogspot.de/2015/12/safepoints.html

‒http://psy-lob-saw.blogspot.de/2016/02/why-most-sampling-java-profilers-are.html

• Flight Recorder Docs: https://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/

• Generally recommended: http://hirt.se/

Page 53: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

53

Slides

https://daniel.mitterdorfer.name/talks/

Page 54: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

54

Image Credits

• So klein und schon ein flight recorder by Uwe Hauck (used with written permission of the author)

• Nasa Social February 2017 by Nasa Johnson (license: CC BY-NC-ND 2.0)

• Tyler Greene Dodges Eric Young by Paul Martinez (license: CC BY-NC-ND 2.0)

• IMG_2857 by John M (license: CC BY-NC-ND 2.0)

• Greed by las - initially (license: CC BY-NC-ND 2.0)

• IMG_9861 by 7263255 (license: CC BY-SA 2.0)

• 2014 Bahrain GP - FP3 & Qualifying by CaterhamF1 (license: CC BY-NC-ND 2.0)

Page 55: Java Flight Recorderdaniel.mitterdorfer.name/talks/2017/JVM-Con - Java... · 6 What is Java Flight Recorder? •Low-overhead sampling profiler •Originally part of JRockit •In

5555