140
01

JVM: need for speed - tooling overview for jdk.io 2016

Embed Size (px)

Citation preview

Page 1: JVM: need for speed - tooling overview for jdk.io 2016

01

Page 2: JVM: need for speed - tooling overview for jdk.io 2016

About me02

Page 3: JVM: need for speed - tooling overview for jdk.io 2016

Andrey AdamovichJava/Groovy developer

(Sometimes) application performance analyst

Co­author of Groovy 2 Cookbook

Co­organizer of @latcraft and @devternity

••••

03

Page 4: JVM: need for speed - tooling overview for jdk.io 2016

Contact detailsE­mail: [email protected]

Linkedin: http://www.linkedin.com/in/andreyadamovich

Lanyrd: http://lanyrd.com/profile/andrey­adamovich

GitHub: https://github.com/aadamovich

SO: http://stackoverflow.com/users/162792/andrey­adamovich

Twitter: @codingandrey, @aestasit

••••••

04

Page 5: JVM: need for speed - tooling overview for jdk.io 2016

What's in thispresentation?

05

Page 6: JVM: need for speed - tooling overview for jdk.io 2016

The tools06

Page 7: JVM: need for speed - tooling overview for jdk.io 2016

The game07

Page 8: JVM: need for speed - tooling overview for jdk.io 2016

RulesPicture is shown

You guess what the next topic is

First one to guess gets a sticker!

•••

08

Page 9: JVM: need for speed - tooling overview for jdk.io 2016

Let's try!09

Page 10: JVM: need for speed - tooling overview for jdk.io 2016

10

Page 11: JVM: need for speed - tooling overview for jdk.io 2016

Java's(Hash)Map11

Page 12: JVM: need for speed - tooling overview for jdk.io 2016

12

Page 13: JVM: need for speed - tooling overview for jdk.io 2016

BigData13

Page 14: JVM: need for speed - tooling overview for jdk.io 2016

Let the gamesbegin!

14

Page 15: JVM: need for speed - tooling overview for jdk.io 2016

15

Page 16: JVM: need for speed - tooling overview for jdk.io 2016

GC Pauses16

Page 17: JVM: need for speed - tooling overview for jdk.io 2016

What are thegood

parameters?17

Page 18: JVM: need for speed - tooling overview for jdk.io 2016

So manyoptions....

18

Page 19: JVM: need for speed - tooling overview for jdk.io 2016

So many options....> java ‐XX:+PrintFlagsFinal ‐version | wc ‐l

java version "1.8.0_45"

Java(TM) SE Runtime Environment (build 1.8.0_45‐b15)

Java HotSpot(TM) 64‐Bit Server VM (build 25.45‐b02, mixed mode)

714

01.

02.

03.

04.

05.

19

Page 20: JVM: need for speed - tooling overview for jdk.io 2016

So many options....> java ‐XX:+PrintFlagsFinal ‐version | wc ‐l

java version "1.7.0_80"

Java(TM) SE Runtime Environment (build 1.7.0_80‐b15)

Java HotSpot(TM) 64‐Bit Server VM (build 24.80‐b11, mixed mode)

668

01.

02.

03.

04.

05.

20

Page 21: JVM: need for speed - tooling overview for jdk.io 2016

So many options....> java ‐XX:+PrintFlagsFinal ‐version | wc ‐l

java version "1.6.0_45"

Java(TM) SE Runtime Environment (build 1.6.0_45‐b06)

Java HotSpot(TM) 64‐Bit Server VM (build 20.45‐b01, mixed mode)

670

01.

02.

03.

04.

05.

21

Page 22: JVM: need for speed - tooling overview for jdk.io 2016

So many options....> java ‐XX:+PrintFlagsFinal ‐version | grep GC | wc ‐l

65

01.

02.

22

Page 23: JVM: need for speed - tooling overview for jdk.io 2016

Use casesWeb application

Streaming application

Background job

•••

23

Page 24: JVM: need for speed - tooling overview for jdk.io 2016

Memory tuning?‐Xms<heap size>[g|m|k] 

‐Xmx<heap size>[g|m|k]

‐XX:PermSize=<perm gen size>[g|m|k] 

‐XX:MaxPermSize=<perm gen size>[g|m|k]

‐Xmn<young size>[g|m|k]

‐XX:SurvivorRatio=<ratio>

01.

02.

03.

04.

05.

06.

24

Page 25: JVM: need for speed - tooling overview for jdk.io 2016

Leverage multi­core‐XX:+UseConcMarkSweepGC 

‐XX:+UseCMSInitiatingOccupancyOnly 

‐XX:+ScavengeBeforeFullGC 

‐XX:+CMSScavengeBeforeRemark

‐XX:+CMSConcurrentMTEnabled

‐XX:CMSInitiatingOccupancyFraction=70

01.

02.

03.

04.

05.

06.

25

Page 26: JVM: need for speed - tooling overview for jdk.io 2016

GC logging‐XX:+PrintGCDetails 

‐XX:+PrintGCDateStamps 

‐Xloggc:<file‐path> 

‐XX:+PrintGCApplicationConcurrentTime 

‐XX:+PrintSafepointStatistics 

‐XX:+PrintHeapAtGC

01.

02.

03.

04.

05.

06.

26

Page 27: JVM: need for speed - tooling overview for jdk.io 2016

Log analysis

27

Page 28: JVM: need for speed - tooling overview for jdk.io 2016

Open source: GCViewer

28

Page 29: JVM: need for speed - tooling overview for jdk.io 2016

Comercial: Censum

29

Page 30: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle30

Page 31: JVM: need for speed - tooling overview for jdk.io 2016

31

Page 32: JVM: need for speed - tooling overview for jdk.io 2016

Memorydumps

32

Page 33: JVM: need for speed - tooling overview for jdk.io 2016

How to take?On out of memory:

‐XX:+HeapDumpOnOutOfMemoryError 

‐XX:HeapDumpPath=<path to dump>`date`.hprof

Or manually:

jmap ‐dump:file=<path to dump> <java process id>

01.

02.

01.

33

Page 34: JVM: need for speed - tooling overview for jdk.io 2016

jhat34

Page 35: JVM: need for speed - tooling overview for jdk.io 2016

Eclipse MAT

35

Page 36: JVM: need for speed - tooling overview for jdk.io 2016

OQL

36

Page 37: JVM: need for speed - tooling overview for jdk.io 2016

Useful characteristicsObject Retained Size

Object Shallow Size

Stale Objects (not connected to GC roots)

•••

37

Page 38: JVM: need for speed - tooling overview for jdk.io 2016

Flight Recording

38

Page 39: JVM: need for speed - tooling overview for jdk.io 2016

ComercialYourKit

jProfiler••

39

Page 40: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle40

Page 41: JVM: need for speed - tooling overview for jdk.io 2016

41

Page 42: JVM: need for speed - tooling overview for jdk.io 2016

Threaddumps

42

Page 43: JVM: need for speed - tooling overview for jdk.io 2016

SituationsDead locks

100% CPU load

Hanging I/O

•••

43

Page 44: JVM: need for speed - tooling overview for jdk.io 2016

jstackjstack <java process pid>01.

44

Page 45: JVM: need for speed - tooling overview for jdk.io 2016

JMXUse MBean with name  java.lang:type=Threading

Call  getAllThreadIds

Loop through all retrieved IDs and call  getThreadInfo

•••

45

Page 46: JVM: need for speed - tooling overview for jdk.io 2016

The cheapest profilerfor ((a=1; a <= 60; a++))

do 

  jstack 7789 > thread‐dump.$a

  sleep 1

  echo $a

done

01.

02.

03.

04.

05.

06.

46

Page 47: JVM: need for speed - tooling overview for jdk.io 2016

Thread dumpanalysis

47

Page 48: JVM: need for speed - tooling overview for jdk.io 2016

Thread dump structure

48

Page 49: JVM: need for speed - tooling overview for jdk.io 2016

Thread states IA thread can be in one of the following states:

NEW  A thread that has not yet started is in this state.

RUNNABLE  A thread executing in the Java virtual machine is in this

state.

BLOCKED  A thread that is blocked waiting for a monitor lock is in this

state.

••

49

Page 50: JVM: need for speed - tooling overview for jdk.io 2016

Thread states IIWAITING  A thread that is waiting indefinitely for another thread to

perform a particular action is in this state.

TIMED_WAITING  A thread that is waiting for another thread to perform

an action for up to a specified waiting time is in this state.

TERMINATED  A thread that has exited is in this state.

50

Page 51: JVM: need for speed - tooling overview for jdk.io 2016

TDA

51

Page 52: JVM: need for speed - tooling overview for jdk.io 2016

SamuraiTDA

52

Page 53: JVM: need for speed - tooling overview for jdk.io 2016

IBM TMDA

53

Page 54: JVM: need for speed - tooling overview for jdk.io 2016

Use customscripts

54

Page 55: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle55

Page 56: JVM: need for speed - tooling overview for jdk.io 2016

56

Page 57: JVM: need for speed - tooling overview for jdk.io 2016

Debugging57

Page 58: JVM: need for speed - tooling overview for jdk.io 2016

We need it when we have...Non­reproducable issues

Hard­to­understand code••

58

Page 59: JVM: need for speed - tooling overview for jdk.io 2016

Enable debugging‐agentlib:jdwp=transport=dt_socket,server=y,address=133701.

59

Page 60: JVM: need for speed - tooling overview for jdk.io 2016

Use your IDE (Eclipse)

60

Page 61: JVM: need for speed - tooling overview for jdk.io 2016

Use your IDE (Intellij IDEA)

61

Page 62: JVM: need for speed - tooling overview for jdk.io 2016

jdb62

Page 63: JVM: need for speed - tooling overview for jdk.io 2016

jdb

63

Page 64: JVM: need for speed - tooling overview for jdk.io 2016

YouDebug64

Page 65: JVM: need for speed - tooling overview for jdk.io 2016

YouDebugYouDebug is a non­interactive debugger scripted by Groovy to assist

remote troubleshooting and data collection to analyze failures.“65

Page 66: JVM: need for speed - tooling overview for jdk.io 2016

YouDebughttp://youdebug.kohsuke.org/

https://github.com/kohsuke/youdebug••

66

Page 67: JVM: need for speed - tooling overview for jdk.io 2016

YouDebug (buggy class)public class SubStringTest {

  public static void main(String[] args) {

    String s = someLengthComputationOfString();

    System.out.println(s.substring(5));

  }

  private static String someLengthComputationOfString() {

    ...;

  }

}

01.

02.

03.

04.

05.

06.

07.

08.

09. 67

Page 68: JVM: need for speed - tooling overview for jdk.io 2016

YouDebug (SubStringMonitor.ydb)breakpoint("com.acme.SubStringTest",3) {

  println "s="+s;

}

01.

02.

03.

68

Page 69: JVM: need for speed - tooling overview for jdk.io 2016

YouDebug (run debugger)> java ‐jar youdebug.jar ‐socket 1337 SubStringMonitor.ydb

s=test

01.

02.

69

Page 70: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle70

Page 71: JVM: need for speed - tooling overview for jdk.io 2016

71

Page 72: JVM: need for speed - tooling overview for jdk.io 2016

Decompiling72

Page 73: JVM: need for speed - tooling overview for jdk.io 2016

Java Decompiler

73

Page 74: JVM: need for speed - tooling overview for jdk.io 2016

Java Decompiler

74

Page 75: JVM: need for speed - tooling overview for jdk.io 2016

IssuesLack of support for latest JVM features

Lack of support for other JVM langauges

Obfuscation is always an issue

•••

75

Page 76: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle76

Page 77: JVM: need for speed - tooling overview for jdk.io 2016

77

Page 78: JVM: need for speed - tooling overview for jdk.io 2016

Profiling78

Page 79: JVM: need for speed - tooling overview for jdk.io 2016

Types of profilingMemory allocation profiling

CPU profiling

Lock profiling

•••

79

Page 80: JVM: need for speed - tooling overview for jdk.io 2016

VisualVM

80

Page 81: JVM: need for speed - tooling overview for jdk.io 2016

Honest Profiler

81

Page 82: JVM: need for speed - tooling overview for jdk.io 2016

ComercialYourKit

jProfiler••

82

Page 83: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle83

Page 84: JVM: need for speed - tooling overview for jdk.io 2016

84

Page 85: JVM: need for speed - tooling overview for jdk.io 2016

Benchmarks85

Page 86: JVM: need for speed - tooling overview for jdk.io 2016

JMHMH is a Java harness for building, running, and analysing

nano/micro/milli/macro benchmarks written in Java and other

languages targetting the JVM.“86

Page 87: JVM: need for speed - tooling overview for jdk.io 2016

JMH: examplepackage org.openjdk.jmh.samples;

import org.openjdk.jmh.annotations.Benchmark;

import org.openjdk.jmh.runner.Runner;

import org.openjdk.jmh.runner.RunnerException;

import org.openjdk.jmh.runner.options.Options;

import org.openjdk.jmh.runner.options.OptionsBuilder;

01.

02.03.

04.

05.

06.

07.

87

Page 88: JVM: need for speed - tooling overview for jdk.io 2016

JHM: examplepublic class JMHSample_01_HelloWorld {

  @Benchmark

  public void wellHelloThere() {

    // this method was intentionally left blank.

  }

01.

02.

03.

04.

05.

88

Page 89: JVM: need for speed - tooling overview for jdk.io 2016

JMH: example  public static void main(String[] args) throws RunnerException {

    Options opt = new OptionsBuilder()

            .include(JMHSample_01_HelloWorld.class.getSimpleName())

            .forks(1)

            .build();

    new Runner(opt).run();

  }

}

01.

02.

03.

04.

05.

06.

07.

08.

89

Page 90: JVM: need for speed - tooling overview for jdk.io 2016

JMH: example> mvn clean install

> java ‐jar target/benchmarks.jar JMHSample_01_HelloWorld

01.

02.

90

Page 91: JVM: need for speed - tooling overview for jdk.io 2016

JMH: annotations@Benchmark @BenchmarkMode @CompilerControl 

@Fork @Group @GroupThreads

@Level @Measurement @Mode

@OperationsPerInvocation @OutputTimeUnit

@Param @Scope @Setup @State

@TearDown @Threads @Timeout @Warmup

01.

02.

03.

04.

05.

06.

91

Page 92: JVM: need for speed - tooling overview for jdk.io 2016

JMH: output

92

Page 93: JVM: need for speed - tooling overview for jdk.io 2016

Load testing toolsjMeter

ab

gatling

•••

93

Page 94: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle94

Page 95: JVM: need for speed - tooling overview for jdk.io 2016

95

Page 96: JVM: need for speed - tooling overview for jdk.io 2016

Leakdetection

96

Page 97: JVM: need for speed - tooling overview for jdk.io 2016

Open sourceLeak Prevention Library

Leak Canary••

97

Page 98: JVM: need for speed - tooling overview for jdk.io 2016

ComercialPlumbr

AppDynamics

NewRelic

•••

98

Page 99: JVM: need for speed - tooling overview for jdk.io 2016

Next riddle99

Page 100: JVM: need for speed - tooling overview for jdk.io 2016

100

Page 101: JVM: need for speed - tooling overview for jdk.io 2016

Monitoring101

Page 102: JVM: need for speed - tooling overview for jdk.io 2016

JMX is yourfriend!

102

Page 103: JVM: need for speed - tooling overview for jdk.io 2016

VisualVM (again)

103

Page 104: JVM: need for speed - tooling overview for jdk.io 2016

Mission Control

104

Page 105: JVM: need for speed - tooling overview for jdk.io 2016

Metricscollection

105

Page 106: JVM: need for speed - tooling overview for jdk.io 2016

JMXTransThis is effectively the missing connector between speaking to a JVM

via JMX on one end and whatever logging / monitoring / graphing

package that you can dream up on the other end.“106

Page 107: JVM: need for speed - tooling overview for jdk.io 2016

jHiccupjHiccup is a non­intrusive instrumentation tool that logs and records

platform "hiccups" ­ including the JVM stalls that often happen when

Java applications are executed and/or any OS or hardware platform

noise that may cause the running application to not be continuously

runnable.

“107

Page 108: JVM: need for speed - tooling overview for jdk.io 2016

jHiccup> java ‐javaagent:jHiccup.jar MyProgram01.

108

Page 109: JVM: need for speed - tooling overview for jdk.io 2016

jHiccup

109

Page 110: JVM: need for speed - tooling overview for jdk.io 2016

Drop Wizard MetricsMetrics provides a powerful toolkit of ways to measure the behavior of

critical components in your production environment.“110

Page 111: JVM: need for speed - tooling overview for jdk.io 2016

Netflix Hysterix

111

Page 112: JVM: need for speed - tooling overview for jdk.io 2016

Stagemonitor

112

Page 113: JVM: need for speed - tooling overview for jdk.io 2016

113

Page 114: JVM: need for speed - tooling overview for jdk.io 2016

Single JVM?114

Page 115: JVM: need for speed - tooling overview for jdk.io 2016

Really?115

Page 116: JVM: need for speed - tooling overview for jdk.io 2016

116

Page 117: JVM: need for speed - tooling overview for jdk.io 2016

Dead JVM117

Page 118: JVM: need for speed - tooling overview for jdk.io 2016

118

Page 119: JVM: need for speed - tooling overview for jdk.io 2016

Many JVMs119

Page 120: JVM: need for speed - tooling overview for jdk.io 2016

Open­source toolsGraphite

Graphana

Logstash

Kibana

Graylog2

Fluentd

••••••

120

Page 121: JVM: need for speed - tooling overview for jdk.io 2016

Comercial toolsNewRelic

Plumbr

AppDynamics

Dynatrace

Takipi

Hyperic

••••••

121

Page 122: JVM: need for speed - tooling overview for jdk.io 2016

Final riddle122

Page 123: JVM: need for speed - tooling overview for jdk.io 2016

123

Page 124: JVM: need for speed - tooling overview for jdk.io 2016

Links124

Page 125: JVM: need for speed - tooling overview for jdk.io 2016

Links: GChttp://spin.atomicobject.com/2014/09/03/visualizing­garbage­

collection­algorithms/

http://techblog.netflix.com/2013/05/garbage­collection­

visualization.html

http://blog.sokolenko.me/2014/11/javavm­options­production.html

https://blog.codecentric.de/en/2013/10/useful­jvm­flags­part­7­cms­

collector/

••

125

Page 126: JVM: need for speed - tooling overview for jdk.io 2016

Links: GChttp://blog.ragozin.info/2011/09/hotspot­jvm­garbage­collection­

options.html

http://blog.tier1app.com/2014/11/19/understand­garbage­collection­

log/

http://www.tagtraum.com/gcviewer­vmflags.html

126

Page 127: JVM: need for speed - tooling overview for jdk.io 2016

Links: GChttp://fasterj.com/tools/gcloganalysers.shtml

https://github.com/chewiebug/GCViewer

http://www.jclarity.com/censum/

•••

127

Page 128: JVM: need for speed - tooling overview for jdk.io 2016

Links: Thread dumpshttp://www.javacodegeeks.com/2012/03/jvm­how­to­analyze­thread­

dump.html

http://www.slideshare.net/buzdin/thread­dump­analysis

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html

••

128

Page 129: JVM: need for speed - tooling overview for jdk.io 2016

Links: Toolshttps://github.com/akullpp/awesome­java

https://github.com/aragozin/jvm­tools

http://openjdk.java.net/projects/code­tools/jmh/

•••

129

Page 130: JVM: need for speed - tooling overview for jdk.io 2016

Links: Toolshttp://youdebug.kohsuke.org/

https://java.net/projects/tda

http://samuraism.jp/samurai/en/index.html

•••

130

Page 131: JVM: need for speed - tooling overview for jdk.io 2016

Links: Toolshttps://github.com/jmxtrans/jmxtrans

http://www.stagemonitor.org/

http://jamonapi.sourceforge.net/

https://github.com/Netflix/Hystrix

••••

131

Page 132: JVM: need for speed - tooling overview for jdk.io 2016

Links: Toolshttp://www.eclipse.org/tptp/home/documents/tutorials/profilingtool/profilingexample_32.html

https://github.com/mjiderhamn/classloader­leak­prevention••

132

Page 133: JVM: need for speed - tooling overview for jdk.io 2016

Readingmaterial

133

Page 134: JVM: need for speed - tooling overview for jdk.io 2016

Java Performance

134

Page 135: JVM: need for speed - tooling overview for jdk.io 2016

Java Performance: The Defenetive Guide

135

Page 136: JVM: need for speed - tooling overview for jdk.io 2016

Java Performance And Scalability

136

Page 137: JVM: need for speed - tooling overview for jdk.io 2016

This is it!137

Page 138: JVM: need for speed - tooling overview for jdk.io 2016

Questions?138

Page 139: JVM: need for speed - tooling overview for jdk.io 2016

Thank you!139

Page 140: JVM: need for speed - tooling overview for jdk.io 2016

Devternity1­2 of December, 2016, Riga

Software Excellence Conference

4 tracks, 30+ speakers, 6 workshops

http://devternity.com

••••

140