VisualVM
• Java troubleshooting tool
• Visual tool integrating several
command line JDK tools and much
more
• For development and production
time
8
VisualVM Features
• Display local/remote Java
applications
• Monitor memory and threads
• Take and browse heap +
thread dumps
• Extensible with plugins
• Attach API or JMX
9
VisualVM Plugins
• MBean browser
• Visual GC
• Memory sampler
• Profiler – CPU, Memory
• BTrace plugin
• Direct buffers monitor (JDK 7)
• Many more …
10
Supported VMs
Java VM Remarks
Sun JDK
Open JDK
Apple JDK
Oracle JRockit
IBM J9 Using JMX only
HP-UX JDK
SAP JDK Requires the VisualVM
Extensions plugin
12
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
13
The Demo Application
14
VisualVM Demo
VisualVM
Demo
15
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
16
Extending VisualVM
What is VisualVM, really?
Generic desktop application
infrastructure for analyzing sources
of data.
Default data sources
• Applications
• Hosts
• Dumps
• Snapshots
17
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
18
Extending VisualVM
• What Can You Create?
• Tabs: Main tabs, Sub tabs
• Actions: Menu items, Toolbar
buttons
• Application Types
• Data Sources
19
Getting Started With Extending VisualVM
• Install JDK 6
• Read VisualVM API Javadoc &
Tutorials
• Create VisualVM modules
• Netbeans IDE
• VisualVM
samples
collection
20
VisualVM Usage Scenarios
• General health monitoring
• Diagnose specific problems
• Memory leaks
• Deadlocks
• Excessive use of finalizers
• Hot lock contention
• Hung process
21
BTrace
22
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
23
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
24
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!");
}
}
25
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.
26
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" Probe Point
)
public static void func() {
println("about to start a thread!"); Action Method
}
}
27
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
28
BTrace Restrictions
• 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 …
29
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
30
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
31
BTrace Demo
Demo
32
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))));
}
}
33
BTrace Usage Scenarios
• Fine grained performance
analysis
• Runtime profiling and monitoring
• Collecting statistics
• When no graphic user interface
available
34
jhat
jhat
35
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
36
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
37
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
38
Getting Started
C:jdk1.6.0_13bin>jhat -J-mx512m c:heapdump-
1245057502890.hprof
Reading from c:heapdump-1245057502890.hprof...
Dump file created Mon Jun 15 12:18:22 IDT 2009
Snapshot read, resolving...
Resolving 120908 objects...
Chasing references, expect 24
dots........................
Eliminating duplicate
references........................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
39
jhat demo
jhat Demo
40
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
41
Summary
Summary
42
Summary
• The JDK contains useful
performance diagnostics tools
• These tools can be used for
detecting, analyzing and solving
performance related issues
43
References
• Monitoring and Troubleshooting Java
applications using JDK tools (PDF)
• VisualVM
• VisualVM Sample Collection
• TS-4247 Getting More Out of the Java
VisualVM Tool (PDF)
• btrace
• ASM
• jhat
44
Did you know your JDK contains visual monitoring to more
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. less
1 comments
Comments 1 - 1 of 1 previous next Post a comment