java runtime concepts 1
DESCRIPTION
Java Runtime Concepts 1TRANSCRIPT
-
2011 IBM Corporation
Java Performance Part 3Application Code Performance
-
2011 IBM Corporation2
Java Concepts and Troubleshooting Agenda
Session 1 (October 17th, 11:00AM Eastern)
Introduction to IBM Java Chris Bailey, Java Service Architect
Java Memory Management Peter Shipton, JVM Technology Lead
Garbage Collection Peter Shipton, JVM Technology Lead
Session 2 (October 19th, 11:00AM Eastern)
Java Tooling Overview Venkat L, Java Service Technical Lead
Java Performance Part 1 Michael Tunnicliffe, Java Service Engineer
Session 3: (October 21st, 11:00AM Eastern)
Java Performance Part 2 Karl Taylor, Java VM Developer
Session 4: (October 24th, 11:00AM Eastern)
Java Performance Part 3 Ian Partridge, Java Service Engineer
Session 5: (October 26th, 11:00AM Eastern)
OutOfMemoryErrors Matthew Kilner, Java Service Team Lead
Feedback!
Please provide any feedback you have to [email protected] or [email protected]
-
2011 IBM Corporation33
Important Disclaimers
THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY.
WHILST EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION
CONTAINED IN THIS PRESENTATION, IT IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED.
ALL PERFORMANCE DATA INCLUDED IN THIS PRESENTATION HAVE BEEN GATHERED IN A CONTROLLED
ENVIRONMENT. YOUR OWN TEST RESULTS MAY VARY BASED ON HARDWARE, SOFTWARE OR
INFRASTRUCTURE DIFFERENCES.
ALL DATA INCLUDED IN THIS PRESENTATION ARE MEANT TO BE USED ONLY AS A GUIDE.
IN ADDITION, THE INFORMATION CONTAINED IN THIS PRESENTATION IS BASED ON IBMS CURRENT PRODUCT
PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM, WITHOUT NOTICE.
IBM AND ITS AFFILIATED COMPANIES SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE
OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION.
NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, OR SHALL HAVE THE EFFECT OF:
- CREATING ANY WARRANT OR REPRESENTATION FROM IBM, ITS AFFILIATED COMPANIES OR ITS OR THEIR
SUPPLIERS AND/OR LICENSORS
-
2011 IBM Corporation4
What is Java Performance?
Java performance problems are grouped into 4 main scenarios:
System resource contention/starvation
Garbage Collection performance
Application code performance
External delays
First stage is to understand which problem you have
-
2011 IBM Corporation5
Application Code Performance
Three particular problem areas:
High CPU usage
Synchronized Resource Contention
External Delays
-
2011 IBM Corporation6
High CPU Usage of Application
Could be the cause of a hang:
Single thread spinning and taking all CPU time
Could be inefficient code
High CPU will be seen in topas and perfmon performance counters as seen previously
First step is to understand whether CPU cost is specific to any given thread, or collection of threads
And then to understand what those threads are doing
-
2011 IBM Corporation7
Profiling CPU Usage: AIX
Use of: tprof skex sleep 60:
Shows percentage of CPU in each process and used by each thread
Shared is shared libraries, Other is the JVM interpreter and JITed code
TID is in decimal and needs to be convered to hex, eg. 688211 = 0xA8053
-
2011 IBM Corporation8
Mapping to Thread Stack: AIX (javacore output)
-
2011 IBM Corporation9
Profiling CPU Usage: Windows
Use of Thread Processor Time and ID Thread counters in perfmon
Use report option rather than graph to see ID Thread value:
ID Thread is in decimal and needs to be converted to hex
ie, Thread 10 has ID Thread 9652, which is 0x25B4
-
2011 IBM Corporation10
Mapping to Thread Stack: Windows
-
2011 IBM Corporation11
Profiling the Methods
A series of javacore.txt files provides a rough idea of what the threads are doing
For a single thread using 100% CPU, the stack track should be sufficient
For a group of threads, it shows some of the methods being executed
Thread and Monitor Dump Analyzer helps with multi-javacore analysis
However method profiling provides a much more accurate picture
Shows complete set of methods being executed
Provides call graphs
Recommendation: Health Center
-
2011 IBM Corporation12
Health Center
Live monitoring tool with very low overhead
Goal of
-
2011 IBM Corporation13
Health Center
Java Heap/Garbage Collection:
Heap usage over time
Garbage Collection performance
Large object allocations
Method Profiling:
(Very) low overhead method profiling
Call paths to show code flow
Timelines to show changes in behaviour
Lock/Synchronized code profiling:
Highly contended locks
Lock contention rates and hold times
Both Java application and JVM locks
-
2011 IBM Corporation14
Synchronized Resource Contention
The contention of multiple threads on one of more synchronized resources
Applications that do not scale well
Normally manifests as:
Low CPU usage for most/all threads
Noticeable responsiveness delays
First step is to look for threads blocked on monitors in the javacore.txt file
-
2011 IBM Corporation15
Javacore.txt Monitor Report
Many threads trying to enter an owned lock
Likely to be a problem, unless the lock is held for very small periods of time
-
2011 IBM Corporation16
Profiling Synchronized Resources
The hold time of a lock could be measured using Method Trace
Must know which lock is of interest
Must select a relevant method to measure the lock hold time from
All locks can be profiled most easily using Health Center
Provides time accounting and contention statistics for Java and JVM locks
-
2011 IBM Corporation17
Health Center Sample Report
Functionality includes:
Counters associated with contended locks
Total number of successful acquires
Recursive acquires times a thread
acquires a lock it already owns
Number of times a thread blocks because
a monitor is already owned
Cumulative time the monitor was held.
-
2011 IBM Corporation18
Fields in the report
-
2011 IBM Corporation19
External Delays
The low performance of an application due to waiting on IO with external resources:
May be database, other application, file IO etc
Normally manifests as:
Low CPU usage for most/all threads
Noticeable responsiveness delays
First step is to look for threads waiting in the javacore.txt file
Especially in networking or database connection code
-
2011 IBM Corporation20
Thread is in state:CW which means it is waiting
Multiple Threads waiting on the same resource is usually an issue
Can profile how long the waits are using Method Trace
-
2011 IBM Corporation21
IBM JVM Trace Engine
Thousands of tracepoints throughout VM native code
Can capture Java Methods data also
Many different operation modes to aid debugging and problem diagnosis
Limited Flight Recorder trace set is always on in Java 5.0
Including GCLogger tracing to store most recent GC activity
-
2011 IBM Corporation22
Controlling Trace
The Trace Engine can be controlled through a number of mechanisms:
Through the -Xtrace command-line option
Using a trace properties file
Dynamically using Java code through the com.ibm.jvm.Trace API
Using trace trigger events
From an external agent using the C-based JVM RAS Interface (JVMRI)
Primary way is via the -Xtrace option on the command line.
-
2011 IBM Corporation23
Basics of activating trace
Determine is the destination to which the trace output should be directed
minimal Trace identifier and timestamp only to in-core buffer.
maximal Trace id, timestamp and associated data (parameters) to in-core buffer.
count Report the number of times a selected tracepoint is called
print Trace selected tracepoints to stderr with no indentation.
iprint Trace selected tracepoints to stderr with indentation.
external Route selected tracepoints to a JVMRI listener.
exception Trace selected tracepoints to an in-core buffer reserved for exceptions.
The value of each keyword is then set to the trace points required
-Xtrace:maximal=all traces all of the information available from all JVM trace points to
internal wrapping buffers.
-Xtrace:iprint=awt traces all of the JVM internal AWT trace points to stderr, with
indentations on entry and exit.
-Xtrace:iprint=mt activates method trace and set the output to stderr with
indentations
-
2011 IBM Corporation24
Method Trace
Instrumentation free tracing of:
Any Java Methods:
Core Java API, Middleware, 3rd party code, Customer code
Detailed information:
Entry and Exit points, with thread information and microsecond time stamps
Two part invocation:
1) Add methods keyword as a token to Xtrace
2) Use of mt as value to destination keyword (eg. maximal, print)
Method selection by class name or method name
use of wildcards, along with the not operator, !, allowing for complex selection criteria.
-Xtrace:print=mt,methods={*.*,!java/lang/*.*}
Write method trace to stderr for all methods and for all classes except those in the
java.lang package.
-Xtrace:maximal=mt,output=trace.out,methods={tests/mytest/*.*}
Write method trace to file for all methods in the tests.mytest package.
-
2011 IBM Corporation25
Triggering
Trace can produce significant amounts of data
The ability is provided to trigger on trace events
Provides ability to create targeted trace output
Provides ability to also generate dumps on trace points
Following actions available as value of trigger keyword
suspend Suspend all tracing
resume Resume all tracing (except for threads suspended by resumecount
property and Trace.suspendThis() calls).
suspendthis Increment the suspendcount/decrement the resumecount for this thread.
resumethis Decrement the suspendcount/increment the resumecount for this thread.
sysdump Produce a non-destructive system dump.
javadump Produce a Java dump.
heapdump Produce a heap dump.
snap Snap all active trace buffers to a file in the current working directory.
resumecount Tracing is disabled if count > 0
suspendcount Tracing is enabled if count > 0
-
2011 IBM Corporation26
Triggering Examples
Following format used to specify triggers in method events:
trigger=method{method spec,entry action,exit action,delay count,match count}
On entering any method that matches the method spec indicated, the entry action is
executed.
When exiting the method, the exit action is performed.
If the delay count is specified, the entry and exit actions are only carried out when entry and
exit have occurred more times than the delay count.
If the match count is specified, the actions are only carried out a maximum of that many
times.
Examples:
-Xtrace:trigger=method{java/lang/StackOverflowError*, sysdump}
create a system dump on the first (and only the first) instance of a StackOverflowError
method being called - which is the method.
-Xtrace:resumecount=1
-Xtrace:trigger=method{HelloWorld.main,resume,suspend}
trace all threads once HelloWorld.main() is called and stop tracing when HelloWorld.main()
returns.
-
2011 IBM Corporation27
Triggering and Method Trace in Action
-Xtrace:
iprint=mt,
methods={myapp/MyTime*},
resumecount=1,
trigger=method{myapp/MyTime.main,resume,suspend}
21:05:47.992*0x806cb00 mt.3 > myapp/MyTime.main([Ljava/lang/String;)V Bytecode
static method
21:05:47.994 0x806cb00 mt.19 - Static method arguments: ([L@55D8CB98)
21:05:47.994 0x806cb00 mt.0 > myapp/MyTime.()V Bytecode method, This =
809baec
21:05:47.994 0x806cb00 mt.18 - Instance method receiver: myapp/MyTime@55D8CBA8
arguments: ()
21:05:47.994 0x806cb00 mt.6 < myapp/MyTime.()V Bytecode method
21:05:47.994 0x806cb00 mt.0 > myapp/MyTime.test()V Bytecode method, This =
809baf0
21:05:47.994 0x806cb00 mt.18 - Instance method receiver: myapp/MyTime@55D8CBA8
arguments: ()
21:05:48.079 0x806cb00 mt.6 < myapp/MyTime.test()V Bytecode method
21:05:48.079 0x806cb00 mt.9 < myapp/MyTime.main([Ljava/lang/String;)V Bytecode
static method
Only real time (79ms) is in the call to MyTime.test()
-
2011 IBM Corporation28
Triggering and Method Trace in Action
Could now drill down into MyTime.test():
Extend scope of methods traced, and reduce scope of tracing into MyTime.test()
-Xtrace:
iprint=mt,
methods={myapp/*},
resumecount=1,
trigger=method{myapp/MyTime.test,resume,suspend}
21:07:14.968*0x806cb00 mt.0 > myapp/MyTime.test()V Bytecode method, This = 809baf0
21:07:14.970 0x806cb00 mt.18 - Instance method receiver: myapp/MyTime@55D8CBA8
arguments: ()
21:07:15.067 0x806cb00 mt.3 > myapp/MyTimer.getTime()V Bytecode static method
21:07:15.067 0x806cb00 mt.19 - Static method arguments: ()
21:07:15.067 0x806cb00 mt.9 < myapp/MyTimer.getTime()V Bytecode static method
21:07:15.069 0x806cb00 mt.6 < myapp/MyTime.test()V Bytecode method
-
2011 IBM Corporation29
Profiling Thread Waits
Delayed method is com.ibm.as400.access.AS400ThreadedServer.receive
Can profile calls to this method via method trace with the following:
-Xtrace:maximal=mt,output=mtrace#.out,10m,10,V
Trace methods to 10 files named mtrace#.out each sized at 10MB
Vmethods={com/ibm/as400/access/AS400ThreadedServer.receive}
Trace entry and exit of AS400ThreadedServer.receive
-
2011 IBM Corporation30
Summary
Lots of different performance problem causes:
System level resources
Java and middleware tuning
Application code
External resources
A number of capabilities provided at each level to help diagnose:
Operating System tools
Java debug capabilities: Verbose GC, Javacore.txt, Method Trace
Java tools: Health Center, GC and Memory Analyzer, Thread and Monitor Dump Analyzer
-
2011 IBM Corporation31
Questions?
-
2011 IBM Corporation3232
References
Get Products and Technologies:
IBM Developer Kits for Java:
https://www.ibm.com/developerworks/java/jdk/
IBM Monitoring and Diagnostic Tools for Java:
https://www.ibm.com/developerworks/java/jdk/tools/
Learn:
IBM Java InfoCenters:
https://www.ibm.com/developerworks/java/jdk/docs.html
Discuss:
IBM Java Runtimes and SDKs Forum:
http://www.ibm.com/developerworks/forums/forum.jspa?forumID=367&start=0
IBM Java Technology Community:
https://www.ibm.com/developerworks/mydeveloperworks/groups/service/html/communityview?
communityUuid=738b7897-cd38-4f24-9f05-48dd69116837
IBM on Troubleshooting Java Applications Blog:
https://www.ibm.com/developerworks/mydeveloperworks/blogs/troubleshootingjava/
-
2011 IBM Corporation3333
Copyright and Trademarks
IBM Corporation 2011. All Rights Reserved.
IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business
Machines Corp., and registered in many jurisdictions worldwide.
Other product and service names might be trademarks of IBM or other companies.
A current list of IBM trademarks is available on the Web see the IBM Copyright and trademark
information page at URL: www.ibm.com/legal/copytrade.shtml