JDK Tools For Performance Diagnostics

45
JDK tools for performance diagnostics Dror Bereznitsky Director of Technologies, AlphaCSP

description

Did you know your JDK contains visual monitoring tools with features like: Profiler, Visual GC, Heap dump browsing and much more? VisualVM, BTrace and jhat are just some examples for useful performance diagnostics tools hidden in your JDK. Join us for this session to see what tools are out there and how you can use them to identify and solve performance related issues.

Transcript of JDK Tools For Performance Diagnostics

Page 1: JDK Tools For Performance Diagnostics

JDK tools for performance diagnostics

Dror BereznitskyDirector of Technologies, AlphaCSP

Page 2: JDK Tools For Performance Diagnostics

2

Introduction

Application to slow ?

Image courtesy of WTL photos - flickr

Page 3: JDK Tools For Performance Diagnostics

3

Introduction

Leaking

Memory

?

Image courtesy of neoliminal- flickr

Page 4: JDK Tools For Performance Diagnostics

4

Intoduction

Suffering from deadlocks ?

Image courtesy of hfb - flickr

Page 5: JDK Tools For Performance Diagnostics

5

Introduction

The JDK has tools that can help you …

Image courtesy of docman - flickr

Page 6: JDK Tools For Performance Diagnostics

6

JDK tools for performance diag.

Image courtesy of dodgechallenger1 - flickr

• JDK tools for performance diagnostics:

VisualVM

BTrace

jhat jmap

jconsole

jstat

jinfo

jps

jstack

Page 7: JDK Tools For Performance Diagnostics

7

VisualVM

Page 8: JDK Tools For Performance Diagnostics

8

VisualVM

• Java troubleshooting tool

• Visual tool integrating several command line JDK tools and much more

• For development and production time

Page 9: JDK Tools For Performance Diagnostics

9

VisualVM Features

• Display local/remote Java applications

• Monitor memory and threads

• Take and browse heap + thread dumps

• Extensible with plugins

• Attach API or JMX

Page 10: JDK Tools For Performance Diagnostics

10

• MBean browser

• Visual GC

• Memory sampler

• Profiler – CPU, Memory

• BTrace plugin

• Direct buffers monitor (JDK 7)

• Many more …

VisualVM Plugins

Page 11: JDK Tools For Performance Diagnostics

11

VisualVM Feature Matrix

JDK 6

Remote

JDK 6

Local

JDK 5JDK 1.4.2

Overview

System properties

Monitor

Threads

Profiler

Thread Dump

Heap Dump

Heam Dump OOME

MBean Browser

JConsole plugins

Page 12: JDK Tools For Performance Diagnostics

12

Supported VMs

RemarksJava VM

Sun JDK

Open JDK

Apple JDK

Oracle JRockit

Using JMX onlyIBM J9

HP-UX JDK

Requires the VisualVM Extensions plugin

SAP JDK

Page 13: JDK Tools For Performance Diagnostics

13

Getting Started

• Version 1.0 ships with JDK6 since update 7

• Look for jvisualvm in your JDK bin directory

• Version 1.1.1 now ships with JDK6 update 14

• Latest version can be downloaded from https://visualvm.dev.java.net

Page 14: JDK Tools For Performance Diagnostics

14

The Demo Application

Page 15: JDK Tools For Performance Diagnostics

15

VisualVM Demo

VisualVM Demo

Page 16: JDK Tools For Performance Diagnostics

16

Working With Remote Applications

• Start a jstatd daemon on the remote host

• Allow remote monitoring tools to attach to running JVMs

• May have security implications

• Add the remote host to the ‘Remote’ node in the Applications window

Page 17: JDK Tools For Performance Diagnostics

17

Extending VisualVM

What is VisualVM, really?

Generic desktop application infrastructure for analyzing sources of data.

Default data sources

• Applications

• Hosts

• Dumps

• Snapshots

Page 18: JDK Tools For Performance Diagnostics

18

Extending VisualVM

• Why you would want to extend VisualVM:• Tool-Centric

You have a monitoring or management tool that you want to make available to VisualVM• BTrace plugin

• Application-Centric You have an application with specific monitoring/management needs• Glassfish plugin

Page 19: JDK Tools For Performance Diagnostics

19

Extending VisualVM

• What Can You Create?

• Tabs: Main tabs, Sub tabs

• Actions: Menu items, Toolbar

buttons

• Application Types

• Data Sources

Page 20: JDK Tools For Performance Diagnostics

20

Getting Started With Extending VisualVM

• Install JDK 6

• Read VisualVM API Javadoc & Tutorials

• Create VisualVM modules

• Netbeans IDE

• VisualVM samples collection

Page 21: JDK Tools For Performance Diagnostics

21

VisualVM Usage Scenarios

• General health monitoring

• Diagnose specific problems

• Memory leaks

• Deadlocks

• Excessive use of finalizers

• Hot lock contention

• Hung process

Page 22: JDK Tools For Performance Diagnostics

22

BTrace

Page 23: JDK Tools For Performance Diagnostics

23

BTrace

• Dynamic tracing tool for the Java platform

• Safe – read, no write

• Low-overhead

• Tracing code is written in Java

• Available as a VisualVM plugin or as a command line tool

Page 24: JDK Tools For Performance Diagnostics

24

Dynamic Tracing

• Works by dynamically instrumenting classes of a running Java program – using ASM 3.0

• ASM is an all purpose Java bytecode manipulation and analysis framework

• Inserts tracing actions by hot-swapping the traced program classes

Page 25: JDK Tools For Performance Diagnostics

25

BTrace HelloWorld Example

import com.sun.btrace.annotations.*;

import static com.sun.btrace.BTraceUtils.*;

@BTrace

public class HelloWorld {

@OnMethod(

clazz="java.lang.Thread",

method="start"

)

public static void func() {

println("about to start a thread!");

}

}

Page 26: JDK Tools For Performance Diagnostics

26

BTrace Terminology

• Probe Point• "location" or "event" at which a set of tracing

statements are executed.

• Trace Actions/Actions• Trace statements that are executed whenever

a probe "fires".

• Action Methods• Trace statements that are executed when a

probe fires

• defined inside a static method

• Such methods are called "action" methods.

Page 27: JDK Tools For Performance Diagnostics

27

BTrace HelloWorld Example

import com.sun.btrace.annotations.*;

import static com.sun.btrace.BTraceUtils.*;

@BTrace

public class HelloWorld {

@OnMethod(

clazz="java.lang.Thread",

method="start"

)

public static void func() {

println("about to start a thread!");

}

}

Probe Point

Action Method

Page 28: JDK Tools For Performance Diagnostics

28

Some BTrace Annotations

• @OnMethod

• Specify target class(es), target method(s) and "location(s)" within the method(s)

• @OnLowMemory

• Trace memory threshold exceed event

• @OnTimer

• Specify tracing actions that have to run periodically once every N milliseconds

Page 29: JDK Tools For Performance Diagnostics

29

• can not create new objects.

• can not create new arrays.

• can not throw exceptions.

• can not catch exceptions.

• can not have loops (for, while, do..while)

• Almost everything is restricted …

BTrace Restrictions

Page 30: JDK Tools For Performance Diagnostics

30

com.sun.btrace.BTraceUtils

• Contains 270 public static methods which may be called from a BTrace script

• Many useful methods:

• deadlocks - prints the Java level deadlocks detected (if any)

• dumpHeap - dump the snapshot of the Java heap

• jstack - Prints the java stack trace of the current thread

Page 31: JDK Tools For Performance Diagnostics

31

Getting Started

• BTrace is available as a VisualVM plugin

• Requires VisualVM 1.0.1+

• Available at the BTrace plugin center -https://btrace.dev.java.net/uc/updates.xml

Page 32: JDK Tools For Performance Diagnostics

32

BTrace Demo

Demo

Page 33: JDK Tools For Performance Diagnostics

33

BTrace Demo Source

@BTrace

public class SizeOfStatusCache {

@OnMethod(

clazz = "com.alphacsp.performance.seminar.twitter.Main",

method = "pollForNewStatuses",

location = @Location(Kind.RETURN)) public static void onNewStatuses(Object obj) {

List statusCache =

(List) get(field(classOf(obj), "statusCache", true), obj);

println(concat("Number of cached statuses: ",

str(size(statusCache))));

}

}

Page 34: JDK Tools For Performance Diagnostics

34

BTrace Usage Scenarios

• Fine grained performance analysis

• Runtime profiling and monitoring

• Collecting statistics

• When no graphic user interface available

Page 35: JDK Tools For Performance Diagnostics

35

jhat

jhat

Page 36: JDK Tools For Performance Diagnostics

36

jhat

• Java Heap Analysis Tool

• Parses a java heap dump and launches a web server

• Basic web interface for browsing the heap dump

• Useful for analyzing memory leaks

Page 37: JDK Tools For Performance Diagnostics

37

jhat Features

• View all class instances

• View class classloader

• View all references to an object

• View reference chains from Rootset

• Use OQL (Object Query Language) to query heap dumps

Page 38: JDK Tools For Performance Diagnostics

38

OQL

• SQL-like query language to query Java heap

• Based on JavaScript expression language

• Built-in objects and functions

• OQL help is available from the jhat OQL screen

Page 39: JDK Tools For Performance Diagnostics

39

Getting Started

C:\jdk1.6.0_13\bin>jhat -J-mx512m c:\heapdump-1245057502890.hprof

Reading from c:\heapdump-1245057502890.hprof...Dump file created Mon Jun 15 12:18:22 IDT 2009Snapshot read, resolving...Resolving 120908 objects...Chasing references, expect 24

dots........................Eliminating duplicate

references........................Snapshot resolved.Started HTTP server on port 7000Server is ready.

Page 40: JDK Tools For Performance Diagnostics

40

jhat demo

jhat Demo

Page 41: JDK Tools For Performance Diagnostics

41

jhat Usage Scenarios

• When analyzing large heap dumps – can use a remote powerful server

• When you do not have a graphic user interface

• If you want to perform smart queries on heap content

Page 42: JDK Tools For Performance Diagnostics

42

Summary

Summary

Page 43: JDK Tools For Performance Diagnostics

43

Summary

• The JDK contains useful performance diagnostics tools

• These tools can be used for detecting, analyzing and solving performance related issues

Page 45: JDK Tools For Performance Diagnostics

45

Thank You