100 likes | 229 Views
Troubleshooting Slow or Hung Java Applications. Bill Au CBS Interactive http://www.apache.org/~billa/javaone2011/. Agenda. Tools of the Trade Case Studies. Tools – Out Of The Box. jinfo , jmap , jstack , jstat JConsole , VisualVM
E N D
Troubleshooting Slow or Hung Java Applications Bill Au CBS Interactive http://www.apache.org/~billa/javaone2011/
Agenda • Tools of the Trade • Case Studies
Tools – Out Of The Box • jinfo, jmap, jstack, jstat • JConsole, VisualVM • Monitor CPU usage by using JTop plug-in ($JAVA_HOME/demo/management/JTop) • java.lang.management • Platform MXBeans: runtime, operating system, class loading, compilation, garbage collection, memory, thread • Sample code in $JAVA_HOME/demo/management
Tools – java.lang.management • Sample code: import java.lang.management.*; ThreadMXBeantb=ManagementFactory.getThreadMXBean(); if (tb.isThreadCpuTimeSupported()) { long[] tids=tb.getAllThreadIds(); for (long tid : tids) { System.out.println(“cputime:”+tb.getThreadCpuTime(tid)); System.out.println(“usertime:”+tb.getThreadUserTime(tid)); } }
Tools • Garbage collection log • -Xloggc:<filename> • Sizes before and after GC events • Timestamp and duration of GC events • More options to explore: • -XX:+PrintGCDateStamps • -XX:+PrintGCDetails • -XX:+PrintTenuringDistribution • -XX:+PrintGCApplicationsStoppedTime
Tools • Thread dump • kill -3 (or kill –SIGHUP) • JConsole, VisualVM • ThreadMXBean • jstack (-F) • Consecutive thread dumps • Stop motion animation
Hung or Slow App • Long GC pauses and/or high GC overhead • Basic GC tuning • max heap size: -Xmx • type of collector used • -XX:+UserSerialGC • -XX:+UseParallelGC/-XX:+UseParallelOldGC • -XX:+UseConcMarkSweepGC • -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC (jdk6u14+) • Advanced GC tuning • young generation size: -Xmn • Baseline, tune, measure one change at a time • Demo: HPjmeter – garbage collection analysis (and more…)
Hung or Slow App • Deadlock • Take thread dump to run the JVM’s deadlock detector • Looping Threads • Monitor CPU times of running threads • ThreadMXBean • JTop plug-in for JConsole/VisualVM • Inspect stack trace of suspicious threads Source: TBD
Slow or Hung App • Blocked threads • Look for blocked threads waiting on the same condition • Identify bottleneck for resource contention • Inspect code for incautious and/or improper synchronization • Demo: samurai – thread dump analysis tool • Stuck threads • Look for runnable threads with the same stack trace across consecutive thread dumps • Some common causes: • Blocking for a network call without specifying connect and/or read timeout (default may be no timeout) • Long execution time for calls to backend servers
Links • Presentation http://www.apache.org/~billa/javaone2011 • HPjmeterhttps://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPJMETER • samurai http://yusuke.homeip.net/samurai/en/index.html