SlideShare a Scribd company logo
Chris Bailey – IBM Runtime Monitoring and Diagnostics 
30th September 2014 
Java Debugging 
Tools and Tricks for Troubleshooting 
Document number 
© 2014 IBM Corporation
© 2014 IBM Corporation 
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 IBM’S 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 
2
Introduction to the speaker 
 Chris Bailey 
IBM Runtime Monitoring and Diagnostics Architect 
- 14 years working with Java and JVM technologies 
 Recent work focus: 
- Java monitoring, diagnostics and troubleshooting 
- Java integration into the cloud 
- JavaScript monitoring, diagnostics and troubleshooting 
 My contact information: 
- baileyc@uk.ibm.com 
- http://www.linkedin.com/in/chrisbaileyibm 
- http://www.slideshare.net/cnbailey/ 
- @Chris__Bailey 
© 2014 3 IBM Corporation
OutOfMemory 
© 2014 4 IBM Corporation
Java Memory Usage 
 Maximum memory available to a process is determined by architecture 
– 32bit process is limited to 2^32 bytes = 4GB 
– 64bit process is limited to 2^64 bytes = 16 EiB 
● Example for 32bit: 
0 GB 4 GB 
-Xmx 
OS and C-Runtime Java Heap(s) 
Native Heap 
0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000 
 Amount and location of memory used for “OS and C Runtime” determined by OS 
© 2014 5 IBM Corporation
Layout by OS 
 Windows 32bit: 
0 GB 4 GB 
-Xmx 
Java Heap(s) Native Heap 
OS and C-Runtime 
0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000 
 Windows 32bit with /3GB: 
Libraries 
0 GB 4 GB 
-Xmx 
Java Heap(s) Native Heap 
OS and C-Runtime 
0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000 
Libraries 
© 2014 6 IBM Corporation
Layout by OS 
 Linux 32bit: 
0 GB 4 GB 
-Xmx 
Java Heap(s) Native Heap 
Kernel 
0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000 
 Linux with hugemem kernel: 
0 GB 4 GB 
-Xmx 
Java Heap(s) Native Heap 
K 
0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000 
© 2014 7 IBM Corporation
Native Heap Usage 
Java Heap Native Heap 
© 2014 8 IBM Corporation
Native Heap Usage 
Java Heap Native Heap 
© 2014 9 IBM Corporation
OutOfMemoryErrors 
 An OutOfMemoryError occurs if the Java heap or Native heap is exhausted 
– Or the PermArea (for HotSpot before Java 8) 
 Tools are needed to track the memory usage of each of the pools: 
– Kernel/OS: OS (malloc) managed 
– Native Heap: OS (malloc) managed 
– Java Heap: Garbage Collection managed 
 Malloc managed memory needs to be tracked at the OS level* 
 Garbage Collection needs to be tracked at the Java runtime level 
* The JVM can grab this information from the OS for you 
© 2014 10 IBM Corporation
OS Level Memory Monitoring 
Linux: “ps” utility Windows: “perfmon” Virtual Bytes counters 
#!/bin/sh 
PID=$1 
INTERVAL=3 
# Echo time at start of monitoring. 
echo timestamp = `date +%s` 
# Echo the interval frequency. 
echo "ps interval = $INTERVAL" 
# Run the system command at intervals. 
while ([ -d /proc/$PID ]) do 
ps -p $PID -o pid,vsz,rss 
sleep $INTERVAL 
done 
Can be collected to CSV file 
© 2014 11 IBM Corporation
OS Level Memory Monitoring 
Linux: “ps” utility Windows: “perfmon” Virtual Bytes counters 
#!/bin/sh 
PID=$1 
INTERVAL=3 
# Echo time at start of monitoring. 
echo timestamp = `date +%s` 
# Echo the interval frequency. 
echo "ps interval = $INTERVAL" 
# Run the system command at intervals. 
while ([ -d /proc/$PID ]) do 
ps -p $PID -o pid,vsz,rss 
sleep $INTERVAL 
done 
Can be collected to CSV file 
© 2014 12 IBM Corporation
Visualization of OS level memory monitoring 
● Garbage Collection and Memory Visualizer (GCMV): 
- Available from 
● Tool to analyze Java Heap and “Native” Heap memory 
● Provides Graphical Display of Data 
- Allows zooming and cropping 
- Allows change of axes value and units 
- Allows comparison of multiple files 
● Analysis and Recommendations 
- Statistical summary and recommendations 
- Flags errors and warnings 
● Supports Linux, Windows, AIX, i5/OS and z/OS 
© 2014 13 IBM Corporation
Runtime Monitoring using JVM Tools 
 IBM Health Center (IBM JVMs*) 
– -Xhealthcenter 
 Machine and process memory usage 
 Native heap breakdown 
* limited support exists for HotSpot 
 Oracle Mission Control (HotSpot JVMs) 
– -XX:+UnlockCommercialFeatures 
– -XX:+FlightRecorder 
 Machine and process memory usage 
© 2014 14 IBM Corporation
OS Level Memory Profiling 
Windows: UMDH 
 Takes snapshot of the current native heap 
 Tracks allocating stack traces 
 Second snapshot is taken and stack traces 
for outstanding memory is produced 
000000AD bytes in 0x1 allocations (@ 0x00000031 + 
0x0000001F) by: BackTrace00468 
ntdll!RtlpNtMakeTemporaryKey+000074D0 
ntdll!RtlInitializeSListHead+00010D08 
ntdll!wcsncat+00000224 
leakyjniapp! 
Java_com_ibm_jtc_demos_LeakyJNIApp_nativeMethod 
 Detailed on Microsoft website: 
http://support.microsoft.com/kb/268343 
 Also check out “debugdiag” 
Linux:Debug Malloc / Malloc Interception 
 Approach 1: 
– Intercept calls to malloc and free 
– Create a stacks allocation table 
– IBM provides a Linux Memory Tracker 
 Approach 2: valgrind 
valgrind --trace-children=yes --leak-check=full 
LEAK SUMMARY: 
definitely lost: 63,957 bytes in 69 blocks. 
indirectly lost: 2,168 bytes in 12 blocks. 
possibly lost: 8,600 bytes in 11 blocks. 
still reachable: 5,156,340 bytes in 980 blocks. 
suppressed: 0 bytes in 0 blocks. 
Reachable blocks (those to which a pointer was 
found) are not shown. 
© 2014 15 IBM Corporation
Garbage Collection Monitoring 
 IBM JVMs: 
– -verbose:gc 
– -Xverbosegclog:<name>,X,Y 
 Oracle JVMs: 
– -XX:+PrintGCDateStamps 
– -XX:+PrintGCDetails 
– -XX:+PrintGCTimeStamps 
– -Xloggc:<name> 
 Visualization available in GCMV for both IBM and Oracle verbose:gc 
© 2014 16 IBM Corporation
Runtime GC Monitoring 
 IBM Health Center (IBM JVMs*) 
– -Xhealthcenter 
 Used Heap and Pause Times 
 Allocation Profiling 
* limited support exists for HotSpot 
 Oracle Mission Control (HotSpot JVMs) 
– -XX:+UnlockCommercialFeatures 
– -XX:+FlightRecorder 
 Used Heap and Pause Times 
 Allocation profiling 
© 2014 17 IBM Corporation
Java Heap Profiling: Heap Dump Analysis 
 IBM JVMs: System Dump of PHD 
– -Xdump:system|heap:events=systhrow, 
filter=java/lang/OutOfMemoryError 
– -Xdump:system|heap:events=user 
– -Xtrace:maximal=mt,trigger= 
method{<name>,sysdump|heapdump} 
– com.ibm.jvm.Dump.JavaDump()/HeapDump() 
– Health Center 
 Oracle JVMs: HPROF dump 
 Visualization available in IBM Memory Analyzer 
– -XX:+HeapDumpOnOutOfMemoryError 
– jmap -dump:format=b 
– JConsole 
– Supports both IBM and HotSpot dumps 
– Provides leak and footprint analysis 
– Provides heap and application visualization 
© 2014 18 IBM Corporation
Java Heap Profiling: Heap Dump Analysis 
© 2014 19 IBM Corporation
Debugging from Dumps 
© 2014 20 IBM Corporation
Debugging from Dumps 
● System dumps and HPROF dumps contain Object fields and values 
● System dumps also have thread stacks and local variables 
● Provides visibility into code flow 
● Zero ongoing performance overhead 
● Dump time is ~2s/GB 
● Makes it possible to diagnose a much wider set of issues 
● Exceptions: ability to look at data not exposed in the message 
● Functional Issues: possible to look at the data being acted on 
© 2014 21 IBM Corporation
Exceptions 
● java.net.ConnectException 
java.net.ConnectException: Connection refused: connect 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:352) 
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:214) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:201) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377) 
● Stack trace in Memory Analyzer gives 
access to local variables 
- host Name = Bailey-W530 
- port = 100 
© 2014 22 IBM Corporation
Functional Issues 
● java.lang.OutOfMemoryError allocating a 1,129,665,376 byte object 
at com/ibm/wsspi/security/token/WSOpaqueTokenHelper.readTokens(WSOpaqueTokenHelper.java:924) 
at com/ibm/wsspi/security/token/WSOpaqueTokenHelper.createTokenHolderListFromOpaqueToken(WSOpaqueTokenHelper.java:844) 
at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl.fromBytesInDomain(MessagingEngineIdentityImpl.java:439) 
at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl.access$200(MessagingEngineIdentityImpl.java:91) 
at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl$2.run(MessagingEngineIdentityImpl.java:299) 
at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl$2.run(MessagingEngineIdentityImpl.java:293) 
at com/ibm/ws/sib/security/impl/BusUtilities.doInBusDomain(BusUtilities.java:115) 
● The readTokens method references a ByteArrayInputStream with a pos of 2369 
● Content of ByteArrayStream around 2369: 
● Which converts to 1,129,665,364 
© 2014 23 IBM Corporation
Performance 
© 2014 24 IBM Corporation
Performance Analysis 
 Need to look at each of the layers of the application: 
– Platform: Machine and Operating System resources 
– Runtime: Java heap resources 
– Application: Inefficient code, synchronization 
 Recommended to look at Platform and Runtime first 
– “Easy to resolve” 
 Biggest gains are in the application and back end responsiveness 
– OS and Java Runtime are already highly tuned and self adapting 
© 2014 25 IBM Corporation
OS Level Memory Monitoring 
Linux: 
vmstat {interval} {samples} > vmstat.out 
procs -----------memory---------- -swap- --io-- --system-- ---cpu--- 
r b swpd free buff cache si so bi bo in cs us sy id wa 
0 0 17196 679860 1196656 2594884 0 0 1 4 0 0 0 0 100 0 
0 0 17196 679868 1196656 2594884 0 0 0 40 1012 43 0 0 100 0 
0 0 17196 679992 1196656 2594884 0 0 0 3 1004 43 0 0 100 0 
top -H -b -c > top_threads.out 
Windows: “perfmon”: 
Process > Page Faults/sec 
Process > %Processor Time 
Network > Output Queue Length 
Physical Disk > Current Disk Queue Length 
Can be collected to CSV file 
top - 15:46:52 up 178 days, 4:53, 2 users, load average: 0.31, 
0.08, 0.02 
Tasks: 77 total, 2 running, 74 sleeping, 1 stopped, 0 zombie 
Cpu(s): 24.6% us, 0.5% sy, 0.0% ni, 74.9% id, 0.0% wa, 0.0% hi, 
0.0% si 
Mem: 5591016k total, 5416896k used, 174120k free, 1196656k 
buffers 
Swap: 2104472k total, 17196k used, 2087276k free, 2594884k 
cached 
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
8502 user1 25 0 599m 466m 5212 R 99.9 8.5 0:23.92 java 
7547 root 15 0 33472 2916 1144 S 0.3 0.1 778:17.98 X 
1 root 16 0 656 228 192 S 0.0 0.0 0:07.43 init 
© 2014 26 IBM Corporation
Garbage Collection Monitoring 
 IBM JVMs: 
– -verbose:gc 
– -Xverbosegclog:<name>,X,Y 
 Oracle JVMs: 
– -XX:+PrintGCDateStamps 
– -XX:+PrintGCDetails 
– -XX:+PrintGCTimeStamps 
– -Xloggc:<name> 
 Visualization available in GCMV for both IBM and Oracle verbose:gc 
© 2014 27 IBM Corporation
Runtime GC Monitoring 
 IBM Health Center (IBM JVMs*) 
– -Xhealthcenter 
 Used Heap and Pause Times 
 Allocation Profiling 
 Oracle Mission Control (HotSpot JVMs) 
– -XX:+UnlockCommercialFeatures 
– -XX:+FlightRecorder 
 Used Heap and Pause Times 
 Allocation profiling 
© 2014 28 IBM Corporation
Application method CPU usage 
 IBM Health Center (IBM JVMs*) 
– -Xhealthcenter 
 CPU usage per method 
 Method call graphs 
 Oracle Mission Control (HotSpot JVMs) 
– -XX:+UnlockCommercialFeatures 
– -XX:+FlightRecorder 
 CPU usage per method 
 Method call graphs 
© 2014 29 IBM Corporation
Application lock usage 
 IBM Health Center (IBM JVMs*) 
– -Xhealthcenter 
 Contention frequency and time 
 Lock hold time 
 Oracle Mission Control (HotSpot JVMs) 
– -XX:+UnlockCommercialFeatures 
– -XX:+FlightRecorder 
 Contention frequency and time 
 Lock hold time 
© 2014 30 IBM Corporation
Questions? 
© 2014 31 IBM Corporation
IBM Developer Kits for Java 
ibm.biz/javasdk 
WebShere Liberty Profile 
wasdev.net 
IBM Bluemix 
ibm.com/bluemix 
IBM Developer Kits for Node.js 
ibm.biz/nodesdk 
© 2014 32 IBM Corporation
www.ibm.com/developer 
Discover 
new technical resources. 
ibm.biz/javaone2014 
Visit Booth 5511 to learn about Cloud, DevOps and Mobile solutions 
© 2014 IBM Corporation 
Develop 
your coding skills. 
Connect 
with developers.
Copyright and Trademarks 
© IBM Corporation 2013. 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 
© 2014 34 IBM Corporation
© 2014 35 IBM Corporation

More Related Content

What's hot (20)

PDF
Transparent GPU Exploitation for Java
Kazuaki Ishizaki
 
PDF
Как мы взломали распределенные системы конфигурационного управления
Positive Hack Days
 
PDF
Going to Mars with Groovy Domain-Specific Languages
Guillaume Laforge
 
PPTX
자바 성능 강의
Terry Cho
 
PDF
Python + GDB = Javaデバッガ
Kenji Kazumura
 
PDF
FLOW3 Tutorial - T3CON11 Frankfurt
Robert Lemke
 
PDF
A new execution model for Nashorn in Java 9
Marcus Lagergren
 
PPTX
ClassLoader Leaks
Mattias Jiderhamn
 
KEY
Scaling Django
Mike Malone
 
PDF
Performance Benchmarking of Clouds Evaluating OpenStack
Pradeep Kumar
 
PDF
The OMR GC talk - Ruby Kaigi 2015
craig lehmann
 
PDF
Advanced AV Foundation (CocoaConf, Aug '11)
Chris Adamson
 
PDF
Diagnosing Your Application on the JVM
Staffan Larsen
 
PDF
[NYC Meetup] Docker at Nuxeo
Nuxeo
 
PDF
Spring Performance Gains
VMware Tanzu
 
PPTX
Modern Java Workshop
Simon Ritter
 
PPT
Find bottleneck and tuning in Java Application
guest1f2740
 
PDF
MySQL and Spark machine learning performance on Azure VMsbased on 3rd Gen AMD...
Principled Technologies
 
ODP
Power ai image-pipeline
Paulo Sergio Lemes Queiroz
 
PDF
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
David Delabassee
 
Transparent GPU Exploitation for Java
Kazuaki Ishizaki
 
Как мы взломали распределенные системы конфигурационного управления
Positive Hack Days
 
Going to Mars with Groovy Domain-Specific Languages
Guillaume Laforge
 
자바 성능 강의
Terry Cho
 
Python + GDB = Javaデバッガ
Kenji Kazumura
 
FLOW3 Tutorial - T3CON11 Frankfurt
Robert Lemke
 
A new execution model for Nashorn in Java 9
Marcus Lagergren
 
ClassLoader Leaks
Mattias Jiderhamn
 
Scaling Django
Mike Malone
 
Performance Benchmarking of Clouds Evaluating OpenStack
Pradeep Kumar
 
The OMR GC talk - Ruby Kaigi 2015
craig lehmann
 
Advanced AV Foundation (CocoaConf, Aug '11)
Chris Adamson
 
Diagnosing Your Application on the JVM
Staffan Larsen
 
[NYC Meetup] Docker at Nuxeo
Nuxeo
 
Spring Performance Gains
VMware Tanzu
 
Modern Java Workshop
Simon Ritter
 
Find bottleneck and tuning in Java Application
guest1f2740
 
MySQL and Spark machine learning performance on Azure VMsbased on 3rd Gen AMD...
Principled Technologies
 
Power ai image-pipeline
Paulo Sergio Lemes Queiroz
 
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
David Delabassee
 

Viewers also liked (16)

PPTX
Hands-on Performance Tuning Lab - Devoxx Poland
C2B2 Consulting
 
PPTX
Java profiling Do It Yourself
aragozin
 
PDF
WebSphere Technical University: Introduction to the Java Diagnostic Tools
Chris Bailey
 
PDF
Profiler Guided Java Performance Tuning
osa_ora
 
PDF
Debugging Your Production JVM
kensipe
 
PDF
Towards JVM Dynamic Languages Toolchain
Attila Szegedi
 
PDF
Hotspot Garbage Collection - The Useful Parts
jClarity
 
PPT
Efficient Memory and Thread Management in Highly Parallel Java Applications
pkoza
 
PDF
Java Performance Tuning
Atthakorn Chanthong
 
PPT
Java Performance Tuning
Minh Hoang
 
PPT
Real Life Java EE Performance Tuning
C2B2 Consulting
 
ODP
An Introduction To Java Profiling
schlebu
 
PPTX
Java performance tuning
Jerry Kurian
 
PPT
Java Performance Monitoring & Tuning
Muhammed Shakir
 
PDF
WebSphere Technical University: Top WebSphere Problem Determination Features
Chris Bailey
 
KEY
Everything I Ever Learned About JVM Performance Tuning @Twitter
Attila Szegedi
 
Hands-on Performance Tuning Lab - Devoxx Poland
C2B2 Consulting
 
Java profiling Do It Yourself
aragozin
 
WebSphere Technical University: Introduction to the Java Diagnostic Tools
Chris Bailey
 
Profiler Guided Java Performance Tuning
osa_ora
 
Debugging Your Production JVM
kensipe
 
Towards JVM Dynamic Languages Toolchain
Attila Szegedi
 
Hotspot Garbage Collection - The Useful Parts
jClarity
 
Efficient Memory and Thread Management in Highly Parallel Java Applications
pkoza
 
Java Performance Tuning
Atthakorn Chanthong
 
Java Performance Tuning
Minh Hoang
 
Real Life Java EE Performance Tuning
C2B2 Consulting
 
An Introduction To Java Profiling
schlebu
 
Java performance tuning
Jerry Kurian
 
Java Performance Monitoring & Tuning
Muhammed Shakir
 
WebSphere Technical University: Top WebSphere Problem Determination Features
Chris Bailey
 
Everything I Ever Learned About JVM Performance Tuning @Twitter
Attila Szegedi
 
Ad

Similar to JavaOne 2014: Java Debugging (20)

PDF
A165 tools for java and javascript
Toby Corbin
 
PDF
Impact2014: Introduction to the IBM Java Tools
Chris Bailey
 
PDF
Java performance - not so scary after all
Holly Cummins
 
PDF
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...
Chris Bailey
 
PDF
Web Sphere Problem Determination Ext
Rohit Kelapure
 
ODP
Debugging Native heap OOM - JavaOne 2013
MattKilner
 
ODP
Windows Debugging Tools - JavaOne 2013
MattKilner
 
PPTX
JavaPerformanceChapter_4
Saurav Basu
 
PDF
Java Performance and Profiling
WSO2
 
PDF
Java Performance and Using Java Flight Recorder
Isuru Perera
 
PDF
A Taste of Monitoring and Post Mortem Debugging with Node
ibmwebspheresoftware
 
PDF
Hp java heap dump analysis Workshop
Madhavan Marimuthu
 
PDF
TechGIG_Memory leaks in_java_webnair_26th_july_2012
Ashish Bhasin
 
PDF
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 
PDF
NZS-4409 - Enterprise Java Monitoring on zOS Discover, Alert, Optimize
IBM z Systems Software - IT Service Management
 
PDF
Software Profiling: Understanding Java Performance and how to profile in Java
Isuru Perera
 
PPT
Eclipse Memory Analyzer - More Than Just a Heap Walker
guest62fd60c
 
PDF
It's Good to Have (JVM) Options - JavaOne
Chris Hansen
 
ODP
From Java Code to Java Heap: Understanding the Memory Usage of Your App - Ch...
jaxLondonConference
 
PDF
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
0xdaryl
 
A165 tools for java and javascript
Toby Corbin
 
Impact2014: Introduction to the IBM Java Tools
Chris Bailey
 
Java performance - not so scary after all
Holly Cummins
 
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...
Chris Bailey
 
Web Sphere Problem Determination Ext
Rohit Kelapure
 
Debugging Native heap OOM - JavaOne 2013
MattKilner
 
Windows Debugging Tools - JavaOne 2013
MattKilner
 
JavaPerformanceChapter_4
Saurav Basu
 
Java Performance and Profiling
WSO2
 
Java Performance and Using Java Flight Recorder
Isuru Perera
 
A Taste of Monitoring and Post Mortem Debugging with Node
ibmwebspheresoftware
 
Hp java heap dump analysis Workshop
Madhavan Marimuthu
 
TechGIG_Memory leaks in_java_webnair_26th_july_2012
Ashish Bhasin
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 
NZS-4409 - Enterprise Java Monitoring on zOS Discover, Alert, Optimize
IBM z Systems Software - IT Service Management
 
Software Profiling: Understanding Java Performance and how to profile in Java
Isuru Perera
 
Eclipse Memory Analyzer - More Than Just a Heap Walker
guest62fd60c
 
It's Good to Have (JVM) Options - JavaOne
Chris Hansen
 
From Java Code to Java Heap: Understanding the Memory Usage of Your App - Ch...
jaxLondonConference
 
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
0xdaryl
 
Ad

More from Chris Bailey (20)

PDF
NodeJS Interactive 2019: FaaS meets Frameworks
Chris Bailey
 
PDF
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Chris Bailey
 
PDF
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Chris Bailey
 
PDF
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
Chris Bailey
 
PDF
AltConf 2019: Server-Side Swift State of the Union
Chris Bailey
 
PDF
Server-side Swift with Swagger
Chris Bailey
 
PDF
Node Summit 2018: Cloud Native Node.js
Chris Bailey
 
PDF
Index - BFFs vs GraphQL
Chris Bailey
 
PDF
Swift Cloud Workshop - Swift Microservices
Chris Bailey
 
PDF
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Chris Bailey
 
PDF
Try!Swift India 2017: All you need is Swift
Chris Bailey
 
PDF
Swift Summit 2017: Server Swift State of the Union
Chris Bailey
 
PDF
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
Chris Bailey
 
PDF
IBM Cloud University: Java, Node.js and Swift
Chris Bailey
 
PDF
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Chris Bailey
 
PDF
FrenchKit 2017: Server(less) Swift
Chris Bailey
 
PDF
AltConf 2017: Full Stack Swift in 30 Minutes
Chris Bailey
 
PDF
InterConnect: Server Side Swift for Java Developers
Chris Bailey
 
PDF
InterConnect: Java, Node.js and Swift - Which, Why and When
Chris Bailey
 
PDF
Playgrounds: Mobile + Swift = BFF
Chris Bailey
 
NodeJS Interactive 2019: FaaS meets Frameworks
Chris Bailey
 
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Chris Bailey
 
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Chris Bailey
 
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
Chris Bailey
 
AltConf 2019: Server-Side Swift State of the Union
Chris Bailey
 
Server-side Swift with Swagger
Chris Bailey
 
Node Summit 2018: Cloud Native Node.js
Chris Bailey
 
Index - BFFs vs GraphQL
Chris Bailey
 
Swift Cloud Workshop - Swift Microservices
Chris Bailey
 
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Chris Bailey
 
Try!Swift India 2017: All you need is Swift
Chris Bailey
 
Swift Summit 2017: Server Swift State of the Union
Chris Bailey
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
Chris Bailey
 
IBM Cloud University: Java, Node.js and Swift
Chris Bailey
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Chris Bailey
 
FrenchKit 2017: Server(less) Swift
Chris Bailey
 
AltConf 2017: Full Stack Swift in 30 Minutes
Chris Bailey
 
InterConnect: Server Side Swift for Java Developers
Chris Bailey
 
InterConnect: Java, Node.js and Swift - Which, Why and When
Chris Bailey
 
Playgrounds: Mobile + Swift = BFF
Chris Bailey
 

Recently uploaded (20)

PDF
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
Human Resources Information System (HRIS)
Amity University, Patna
 
PPTX
How Cloud Computing is Reinventing Financial Services
Isla Pandora
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PPTX
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
PDF
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
PPTX
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
DOCX
Import Data Form Excel to Tally Services
Tally xperts
 
PDF
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PDF
GetOnCRM Speeds Up Agentforce 3 Deployment for Enterprise AI Wins.pdf
GetOnCRM Solutions
 
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Human Resources Information System (HRIS)
Amity University, Patna
 
How Cloud Computing is Reinventing Financial Services
Isla Pandora
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
Import Data Form Excel to Tally Services
Tally xperts
 
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
GetOnCRM Speeds Up Agentforce 3 Deployment for Enterprise AI Wins.pdf
GetOnCRM Solutions
 

JavaOne 2014: Java Debugging

  • 1. Chris Bailey – IBM Runtime Monitoring and Diagnostics 30th September 2014 Java Debugging Tools and Tricks for Troubleshooting Document number © 2014 IBM Corporation
  • 2. © 2014 IBM Corporation 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 IBM’S 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 2
  • 3. Introduction to the speaker  Chris Bailey IBM Runtime Monitoring and Diagnostics Architect - 14 years working with Java and JVM technologies  Recent work focus: - Java monitoring, diagnostics and troubleshooting - Java integration into the cloud - JavaScript monitoring, diagnostics and troubleshooting  My contact information: - [email protected] - http://www.linkedin.com/in/chrisbaileyibm - http://www.slideshare.net/cnbailey/ - @Chris__Bailey © 2014 3 IBM Corporation
  • 4. OutOfMemory © 2014 4 IBM Corporation
  • 5. Java Memory Usage  Maximum memory available to a process is determined by architecture – 32bit process is limited to 2^32 bytes = 4GB – 64bit process is limited to 2^64 bytes = 16 EiB ● Example for 32bit: 0 GB 4 GB -Xmx OS and C-Runtime Java Heap(s) Native Heap 0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000  Amount and location of memory used for “OS and C Runtime” determined by OS © 2014 5 IBM Corporation
  • 6. Layout by OS  Windows 32bit: 0 GB 4 GB -Xmx Java Heap(s) Native Heap OS and C-Runtime 0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000  Windows 32bit with /3GB: Libraries 0 GB 4 GB -Xmx Java Heap(s) Native Heap OS and C-Runtime 0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000 Libraries © 2014 6 IBM Corporation
  • 7. Layout by OS  Linux 32bit: 0 GB 4 GB -Xmx Java Heap(s) Native Heap Kernel 0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000  Linux with hugemem kernel: 0 GB 4 GB -Xmx Java Heap(s) Native Heap K 0x0 0x80000000 0xFFFFFFFF 0x40000000 0xC0000000 © 2014 7 IBM Corporation
  • 8. Native Heap Usage Java Heap Native Heap © 2014 8 IBM Corporation
  • 9. Native Heap Usage Java Heap Native Heap © 2014 9 IBM Corporation
  • 10. OutOfMemoryErrors  An OutOfMemoryError occurs if the Java heap or Native heap is exhausted – Or the PermArea (for HotSpot before Java 8)  Tools are needed to track the memory usage of each of the pools: – Kernel/OS: OS (malloc) managed – Native Heap: OS (malloc) managed – Java Heap: Garbage Collection managed  Malloc managed memory needs to be tracked at the OS level*  Garbage Collection needs to be tracked at the Java runtime level * The JVM can grab this information from the OS for you © 2014 10 IBM Corporation
  • 11. OS Level Memory Monitoring Linux: “ps” utility Windows: “perfmon” Virtual Bytes counters #!/bin/sh PID=$1 INTERVAL=3 # Echo time at start of monitoring. echo timestamp = `date +%s` # Echo the interval frequency. echo "ps interval = $INTERVAL" # Run the system command at intervals. while ([ -d /proc/$PID ]) do ps -p $PID -o pid,vsz,rss sleep $INTERVAL done Can be collected to CSV file © 2014 11 IBM Corporation
  • 12. OS Level Memory Monitoring Linux: “ps” utility Windows: “perfmon” Virtual Bytes counters #!/bin/sh PID=$1 INTERVAL=3 # Echo time at start of monitoring. echo timestamp = `date +%s` # Echo the interval frequency. echo "ps interval = $INTERVAL" # Run the system command at intervals. while ([ -d /proc/$PID ]) do ps -p $PID -o pid,vsz,rss sleep $INTERVAL done Can be collected to CSV file © 2014 12 IBM Corporation
  • 13. Visualization of OS level memory monitoring ● Garbage Collection and Memory Visualizer (GCMV): - Available from ● Tool to analyze Java Heap and “Native” Heap memory ● Provides Graphical Display of Data - Allows zooming and cropping - Allows change of axes value and units - Allows comparison of multiple files ● Analysis and Recommendations - Statistical summary and recommendations - Flags errors and warnings ● Supports Linux, Windows, AIX, i5/OS and z/OS © 2014 13 IBM Corporation
  • 14. Runtime Monitoring using JVM Tools  IBM Health Center (IBM JVMs*) – -Xhealthcenter  Machine and process memory usage  Native heap breakdown * limited support exists for HotSpot  Oracle Mission Control (HotSpot JVMs) – -XX:+UnlockCommercialFeatures – -XX:+FlightRecorder  Machine and process memory usage © 2014 14 IBM Corporation
  • 15. OS Level Memory Profiling Windows: UMDH  Takes snapshot of the current native heap  Tracks allocating stack traces  Second snapshot is taken and stack traces for outstanding memory is produced 000000AD bytes in 0x1 allocations (@ 0x00000031 + 0x0000001F) by: BackTrace00468 ntdll!RtlpNtMakeTemporaryKey+000074D0 ntdll!RtlInitializeSListHead+00010D08 ntdll!wcsncat+00000224 leakyjniapp! Java_com_ibm_jtc_demos_LeakyJNIApp_nativeMethod  Detailed on Microsoft website: http://support.microsoft.com/kb/268343  Also check out “debugdiag” Linux:Debug Malloc / Malloc Interception  Approach 1: – Intercept calls to malloc and free – Create a stacks allocation table – IBM provides a Linux Memory Tracker  Approach 2: valgrind valgrind --trace-children=yes --leak-check=full LEAK SUMMARY: definitely lost: 63,957 bytes in 69 blocks. indirectly lost: 2,168 bytes in 12 blocks. possibly lost: 8,600 bytes in 11 blocks. still reachable: 5,156,340 bytes in 980 blocks. suppressed: 0 bytes in 0 blocks. Reachable blocks (those to which a pointer was found) are not shown. © 2014 15 IBM Corporation
  • 16. Garbage Collection Monitoring  IBM JVMs: – -verbose:gc – -Xverbosegclog:<name>,X,Y  Oracle JVMs: – -XX:+PrintGCDateStamps – -XX:+PrintGCDetails – -XX:+PrintGCTimeStamps – -Xloggc:<name>  Visualization available in GCMV for both IBM and Oracle verbose:gc © 2014 16 IBM Corporation
  • 17. Runtime GC Monitoring  IBM Health Center (IBM JVMs*) – -Xhealthcenter  Used Heap and Pause Times  Allocation Profiling * limited support exists for HotSpot  Oracle Mission Control (HotSpot JVMs) – -XX:+UnlockCommercialFeatures – -XX:+FlightRecorder  Used Heap and Pause Times  Allocation profiling © 2014 17 IBM Corporation
  • 18. Java Heap Profiling: Heap Dump Analysis  IBM JVMs: System Dump of PHD – -Xdump:system|heap:events=systhrow, filter=java/lang/OutOfMemoryError – -Xdump:system|heap:events=user – -Xtrace:maximal=mt,trigger= method{<name>,sysdump|heapdump} – com.ibm.jvm.Dump.JavaDump()/HeapDump() – Health Center  Oracle JVMs: HPROF dump  Visualization available in IBM Memory Analyzer – -XX:+HeapDumpOnOutOfMemoryError – jmap -dump:format=b – JConsole – Supports both IBM and HotSpot dumps – Provides leak and footprint analysis – Provides heap and application visualization © 2014 18 IBM Corporation
  • 19. Java Heap Profiling: Heap Dump Analysis © 2014 19 IBM Corporation
  • 20. Debugging from Dumps © 2014 20 IBM Corporation
  • 21. Debugging from Dumps ● System dumps and HPROF dumps contain Object fields and values ● System dumps also have thread stacks and local variables ● Provides visibility into code flow ● Zero ongoing performance overhead ● Dump time is ~2s/GB ● Makes it possible to diagnose a much wider set of issues ● Exceptions: ability to look at data not exposed in the message ● Functional Issues: possible to look at the data being acted on © 2014 21 IBM Corporation
  • 22. Exceptions ● java.net.ConnectException java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:352) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:214) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:201) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377) ● Stack trace in Memory Analyzer gives access to local variables - host Name = Bailey-W530 - port = 100 © 2014 22 IBM Corporation
  • 23. Functional Issues ● java.lang.OutOfMemoryError allocating a 1,129,665,376 byte object at com/ibm/wsspi/security/token/WSOpaqueTokenHelper.readTokens(WSOpaqueTokenHelper.java:924) at com/ibm/wsspi/security/token/WSOpaqueTokenHelper.createTokenHolderListFromOpaqueToken(WSOpaqueTokenHelper.java:844) at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl.fromBytesInDomain(MessagingEngineIdentityImpl.java:439) at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl.access$200(MessagingEngineIdentityImpl.java:91) at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl$2.run(MessagingEngineIdentityImpl.java:299) at com/ibm/ws/sib/security/impl/MessagingEngineIdentityImpl$2.run(MessagingEngineIdentityImpl.java:293) at com/ibm/ws/sib/security/impl/BusUtilities.doInBusDomain(BusUtilities.java:115) ● The readTokens method references a ByteArrayInputStream with a pos of 2369 ● Content of ByteArrayStream around 2369: ● Which converts to 1,129,665,364 © 2014 23 IBM Corporation
  • 24. Performance © 2014 24 IBM Corporation
  • 25. Performance Analysis  Need to look at each of the layers of the application: – Platform: Machine and Operating System resources – Runtime: Java heap resources – Application: Inefficient code, synchronization  Recommended to look at Platform and Runtime first – “Easy to resolve”  Biggest gains are in the application and back end responsiveness – OS and Java Runtime are already highly tuned and self adapting © 2014 25 IBM Corporation
  • 26. OS Level Memory Monitoring Linux: vmstat {interval} {samples} > vmstat.out procs -----------memory---------- -swap- --io-- --system-- ---cpu--- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 17196 679860 1196656 2594884 0 0 1 4 0 0 0 0 100 0 0 0 17196 679868 1196656 2594884 0 0 0 40 1012 43 0 0 100 0 0 0 17196 679992 1196656 2594884 0 0 0 3 1004 43 0 0 100 0 top -H -b -c > top_threads.out Windows: “perfmon”: Process > Page Faults/sec Process > %Processor Time Network > Output Queue Length Physical Disk > Current Disk Queue Length Can be collected to CSV file top - 15:46:52 up 178 days, 4:53, 2 users, load average: 0.31, 0.08, 0.02 Tasks: 77 total, 2 running, 74 sleeping, 1 stopped, 0 zombie Cpu(s): 24.6% us, 0.5% sy, 0.0% ni, 74.9% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 5591016k total, 5416896k used, 174120k free, 1196656k buffers Swap: 2104472k total, 17196k used, 2087276k free, 2594884k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8502 user1 25 0 599m 466m 5212 R 99.9 8.5 0:23.92 java 7547 root 15 0 33472 2916 1144 S 0.3 0.1 778:17.98 X 1 root 16 0 656 228 192 S 0.0 0.0 0:07.43 init © 2014 26 IBM Corporation
  • 27. Garbage Collection Monitoring  IBM JVMs: – -verbose:gc – -Xverbosegclog:<name>,X,Y  Oracle JVMs: – -XX:+PrintGCDateStamps – -XX:+PrintGCDetails – -XX:+PrintGCTimeStamps – -Xloggc:<name>  Visualization available in GCMV for both IBM and Oracle verbose:gc © 2014 27 IBM Corporation
  • 28. Runtime GC Monitoring  IBM Health Center (IBM JVMs*) – -Xhealthcenter  Used Heap and Pause Times  Allocation Profiling  Oracle Mission Control (HotSpot JVMs) – -XX:+UnlockCommercialFeatures – -XX:+FlightRecorder  Used Heap and Pause Times  Allocation profiling © 2014 28 IBM Corporation
  • 29. Application method CPU usage  IBM Health Center (IBM JVMs*) – -Xhealthcenter  CPU usage per method  Method call graphs  Oracle Mission Control (HotSpot JVMs) – -XX:+UnlockCommercialFeatures – -XX:+FlightRecorder  CPU usage per method  Method call graphs © 2014 29 IBM Corporation
  • 30. Application lock usage  IBM Health Center (IBM JVMs*) – -Xhealthcenter  Contention frequency and time  Lock hold time  Oracle Mission Control (HotSpot JVMs) – -XX:+UnlockCommercialFeatures – -XX:+FlightRecorder  Contention frequency and time  Lock hold time © 2014 30 IBM Corporation
  • 31. Questions? © 2014 31 IBM Corporation
  • 32. IBM Developer Kits for Java ibm.biz/javasdk WebShere Liberty Profile wasdev.net IBM Bluemix ibm.com/bluemix IBM Developer Kits for Node.js ibm.biz/nodesdk © 2014 32 IBM Corporation
  • 33. www.ibm.com/developer Discover new technical resources. ibm.biz/javaone2014 Visit Booth 5511 to learn about Cloud, DevOps and Mobile solutions © 2014 IBM Corporation Develop your coding skills. Connect with developers.
  • 34. Copyright and Trademarks © IBM Corporation 2013. 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 © 2014 34 IBM Corporation
  • 35. © 2014 35 IBM Corporation