+ All Categories
Home > Technology > Troubleshooting Live Java Web Applications

Troubleshooting Live Java Web Applications

Date post: 06-May-2015
Category:
Upload: ashleypuls
View: 473 times
Download: 7 times
Share this document with a friend
Description:
This talk examines methods and tools that can be used to uncover and resolve performance problems arising in Java web applications. It touches on a few common problems such as slow SQL and blocked threads. It uses various diagnostic tools to examine these problems including log files, jvisualvm, and New Relic. Finally, it evaluates the use of these tools in a production environment, separating them into what can and cannot be used in live production applications.
237
Troubleshooting Live Java Web Applications By Ashley Puls Sunday, November 10, 13
Transcript
Page 1: Troubleshooting Live Java Web Applications

Troubleshooting Live Java Web Applications

By Ashley Puls

Sunday, November 10, 13

Page 2: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 3: Troubleshooting Live Java Web Applications

Troubleshooting

Locate and eliminate sources of trouble

Determine and settle problems

Solve problems quickly using a systematic approach

A logical process of elimination to identify the true source of the problem

Sunday, November 10, 13

Page 4: Troubleshooting Live Java Web Applications

How to Become a Good Troubleshooter

Practice makes perfect

Images From: http://www.tennismindgame.com/image-files/topspin-tennis-serve.jpg

Sunday, November 10, 13

Page 5: Troubleshooting Live Java Web Applications

How to Become a Good Troubleshooter

Practice makes perfect

Images From: http://www.tennismindgame.com/image-files/topspin-tennis-serve.jpg, http://blogs.telerik.com/images/default-source/jeff-fritz/toolbox.jpg?sfvrsn=0

Have a good set of tools

Sunday, November 10, 13

Page 6: Troubleshooting Live Java Web Applications

Outline

Examine a web application with multiple performance problems

Troubleshoot the problems using several tools

Discuss the pros and cons of each tool

Sunday, November 10, 13

Page 7: Troubleshooting Live Java Web Applications

What is the Application?

Sunday, November 10, 13

Page 8: Troubleshooting Live Java Web Applications

What is the Application?

Dear Developer,

I had some engineers develop “Running Central” to search for runners, races, and training teams. Can you please keep the site running?

Sincerely,Max SiegelCEO of USA Track and Field

Image From: http://www.sportsbusinessdaily.com/Journal/Issues/2012/06/18/Leagues-and-Governing-Bodies/~/media/8C99287D3B0E4784932EE3BF049E7DA9.ashx

Sunday, November 10, 13

Page 9: Troubleshooting Live Java Web Applications

What is the Application?

MySQL Database

hibernate

racerunners.war

jsp

Client

Client

Client

Servlet

Controller

Manager

Entities

Tomcat Application Server

Sunday, November 10, 13

Page 10: Troubleshooting Live Java Web Applications

Should we Jump into Troubleshooting?

Image From: http://toosoxy.files.wordpress.com/2011/04/cliff.jpg

Sunday, November 10, 13

Page 11: Troubleshooting Live Java Web Applications

What is Trouble?

Image From: http://1.bp.blogspot.com/-_LgC3yz9w4w/T4eI--IcvxI/AAAAAAAAA-o/VLdqkxyQpgg/s400/computerFire.jpg

Sunday, November 10, 13

Page 12: Troubleshooting Live Java Web Applications

What is Trouble?Site Inaccessible

Sunday, November 10, 13

Page 13: Troubleshooting Live Java Web Applications

What is Trouble?Site Inaccessible

ExceptionsIn Logs

Sunday, November 10, 13

Page 14: Troubleshooting Live Java Web Applications

What is Trouble?Site Inaccessible

ExceptionsIn Logs

Loading Slowly

Sunday, November 10, 13

Page 15: Troubleshooting Live Java Web Applications

What is Normal?

Images From: http://espn.go.com/mlb/statistics, http://www.franklinbaseball.com/pros/american-league/central/miguel-cabrera

Sunday, November 10, 13

Page 16: Troubleshooting Live Java Web Applications

Application Response Time

time per request

Memory Consumed

heap and PermGen

Thread Stateactive vs blocked

Thread Pool State

active vs max thread count

Database Response Time

time per request

What Are The Stats?

Sunday, November 10, 13

Page 17: Troubleshooting Live Java Web Applications

How To Gather The Stats

Logs

core JDK tools

Application Performance Monitoring Tools (APM)

Profilers

JMX Metrics

Framework/App Server Monitoring Tools

Sunday, November 10, 13

Page 18: Troubleshooting Live Java Web Applications

Basic information about each tool

Tools Overview Installation Cost Where to Find It For Production

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Basic Information

Sunday, November 10, 13

Page 19: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 20: Troubleshooting Live Java Web Applications

Lets Talk to Some of Our Users

Sunday, November 10, 13

Page 21: Troubleshooting Live Java Web Applications

Image From: http://resources0.news.com.au/images/2012/08/10/1226447/688548-usain-bolt.jpg

Sunday, November 10, 13

Page 22: Troubleshooting Live Java Web Applications

Image From: http://resources0.news.com.au/images/2012/08/10/1226447/688548-usain-bolt.jpg

Usain Bolt : Six Time Olympic Champion

Sunday, November 10, 13

Page 23: Troubleshooting Live Java Web Applications

I was looking for a 5K race on your site,

but it was loading like I was on a 56k

Image From: http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2012/8/9/1344533810934/f582144a-9dd2-44ed-9828-0ec1f5f768a8-460.jpeg

Sunday, November 10, 13

Page 24: Troubleshooting Live Java Web Applications

Lets Investigate!

Sunday, November 10, 13

Page 25: Troubleshooting Live Java Web Applications

New Relic

Application Performance Monitoring (APM) tool that monitors web

apps, mobile apps, servers, and databases

Sign up and download agent from the New Relic Website

Sunday, November 10, 13

Page 26: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Basic Information

Sunday, November 10, 13

Page 27: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 28: Troubleshooting Live Java Web Applications

Application Response Time

Sunday, November 10, 13

Page 29: Troubleshooting Live Java Web Applications

Application Response Time

Sunday, November 10, 13

Page 30: Troubleshooting Live Java Web Applications

Application Response Time

Sunday, November 10, 13

Page 31: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 32: Troubleshooting Live Java Web Applications

YourKit

Profiler that provides in depth CPU, thread, and memory profiling

Get license key and download from YourKit Website

Sunday, November 10, 13

Page 33: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit profiler restarts or attaches all features at cost www.yourkit.com

JVisualVm

JConsole

JMap/JHat

JStack

Basic Information

Sunday, November 10, 13

Page 34: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 35: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 36: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 37: Troubleshooting Live Java Web Applications

CPU Profiler

Sunday, November 10, 13

Page 38: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 39: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 40: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 41: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 42: Troubleshooting Live Java Web Applications

New Relic

Application Performance Monitoring (APM) tool that monitors web

apps, mobile apps, servers, and databases

Sign up and download agent from the New Relic Website

Sunday, November 10, 13

Page 43: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 44: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 45: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 46: Troubleshooting Live Java Web Applications

Heap Memory

Sunday, November 10, 13

Page 47: Troubleshooting Live Java Web Applications

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

Page 48: Troubleshooting Live Java Web Applications

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

Page 49: Troubleshooting Live Java Web Applications

JMap

Prints the memory map of a Java process

Commands

jmap -heap JAVA_PID > /tmp/jmap.out

jmap -dump:file=/tmp/heap_dump.map JAVA_PID

Sunday, November 10, 13

Page 50: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit

JVisualVm

JConsole

JMap/JHat prints memory map of Java process

attaches to running process free included with JDK

JStack

Basic Information

Sunday, November 10, 13

Page 51: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 52: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 53: Troubleshooting Live Java Web Applications

The File

Sunday, November 10, 13

Page 54: Troubleshooting Live Java Web Applications

The File

Heap Memory

Sunday, November 10, 13

Page 55: Troubleshooting Live Java Web Applications

The File

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

Page 56: Troubleshooting Live Java Web Applications

The File

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

Page 57: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 58: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 59: Troubleshooting Live Java Web Applications

The File

Sunday, November 10, 13

Page 60: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 61: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 62: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 63: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 64: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 65: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 66: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 67: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 68: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 69: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 70: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 71: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 72: Troubleshooting Live Java Web Applications

YourKit

Profiler that provides in depth CPU, thread, and memory profiling

Get license key and download from YourKit Website

Sunday, November 10, 13

Page 73: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 74: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 75: Troubleshooting Live Java Web Applications

Non-Heap Memory

Heap Memory

Sunday, November 10, 13

Page 76: Troubleshooting Live Java Web Applications

Non-Heap Memory

Heap Memory

Sunday, November 10, 13

Page 77: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 78: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 79: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 80: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 81: Troubleshooting Live Java Web Applications

/** * Service that records stats on the cities and states queried by users when looking * for races. */public class RaceStatsServiceImpl implements RaceStatsService {

/** Holds the cities queried by users. */ private final Map<String, Integer> citiesQueried; /** Holds the states queried by users. */ private final Map<String, Integer> stateQueried;

public RaceStatsServiceImpl() { citiesQueried = new ConcurrentHashMap<String, Integer>(); stateQueried = new ConcurrentHashMap<String, Integer>(); }

Sunday, November 10, 13

Page 82: Troubleshooting Live Java Web Applications

/** * Service that records stats on the cities and states queried by users when looking * for races. */public class RaceStatsServiceImpl implements RaceStatsService {

/** Holds the cities queried by users. */ private final Map<String, Integer> citiesQueried; /** Holds the states queried by users. */ private final Map<String, Integer> stateQueried;

public RaceStatsServiceImpl() { citiesQueried = new ConcurrentHashMap<String, Integer>(); stateQueried = new ConcurrentHashMap<String, Integer>(); }

Two ConcurrentHashMaps

Sunday, November 10, 13

Page 83: Troubleshooting Live Java Web Applications

/** * Service that records stats on the cities and states queried by users when looking * for races. */public class RaceStatsServiceImpl implements RaceStatsService {

public void addCity(String city);

public void addState(String state);

public void String getMostQueriedForCity();

public void String getMostQueriedForState();

Sunday, November 10, 13

Page 84: Troubleshooting Live Java Web Applications

/** * Service that records stats on the cities and states queried by users when looking * for races. */public class RaceStatsServiceImpl implements RaceStatsService {

public void addCity(String city);

public void addState(String state);

public void String getMostQueriedForCity();

public void String getMostQueriedForState();

None of these methods remove from the

concurrent hash maps

Sunday, November 10, 13

Page 85: Troubleshooting Live Java Web Applications

Key Takeaway

Clean up memory in long running objects

Sunday, November 10, 13

Page 86: Troubleshooting Live Java Web Applications

The File

Sunday, November 10, 13

Page 87: Troubleshooting Live Java Web Applications

The File

Sunday, November 10, 13

Page 88: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 89: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 90: Troubleshooting Live Java Web Applications

Image From: http://news.images.itv.com/image/file/69820/article_9e6cab04948b5c33_1343574136_9j-4aaqsk.jpeg

Sunday, November 10, 13

Page 91: Troubleshooting Live Java Web Applications

Image From: http://news.images.itv.com/image/file/69820/article_9e6cab04948b5c33_1343574136_9j-4aaqsk.jpeg

Paula RadcliffeFemale Marathon World Record Holder

Sunday, November 10, 13

Page 92: Troubleshooting Live Java Web Applications

Image From: http://i3.manchestereveningnews.co.uk/incoming/article660410.ece/ALTERNATES/s615/C_71_article_1584722_image_list_image_list_item_0_image-660410.jpg

It was taking too long to find my fellow runners on

your site

Sunday, November 10, 13

Page 93: Troubleshooting Live Java Web Applications

Lets Investigate!

Sunday, November 10, 13

Page 94: Troubleshooting Live Java Web Applications

JVisualVM

Visual tool which provides heap dumps, memory leak information,

garbage collection monitoring, memory profiling, and CPU profiling

Attaches to local and remote running processes

Sunday, November 10, 13

Page 95: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit profiler restart or attachfeature dependent all features at cost www.yourkit.com

JVisualVm profiler attaches to running process free included with JDK

JConsole

JMap/JHat prints memory map of Java process

attaches to running process free included with JDK

JStack

Basic Information

Sunday, November 10, 13

Page 96: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 97: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 98: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 99: Troubleshooting Live Java Web Applications

Memory Information

Sunday, November 10, 13

Page 100: Troubleshooting Live Java Web Applications

Memory Information

Sunday, November 10, 13

Page 101: Troubleshooting Live Java Web Applications

Memory Information

Sunday, November 10, 13

Page 102: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 103: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 104: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 105: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 106: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 107: Troubleshooting Live Java Web Applications

Kill Dash 3

Provides the current stack trace for each thread in a local JVM (thread dump)

Available on linux and macs (ctrl+break on windows)

Command: kill -3 PID

Sunday, November 10, 13

Page 108: Troubleshooting Live Java Web Applications

JStack

Provides the current stack trace for each thread in a local or remote

JVM (thread dump)

Command: jstack -l JAVA_PID > /tmp/jstack.out

Sunday, November 10, 13

Page 109: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit profiler restart or attachfeature dependent all features at cost www.yourkit.com

JVisualVm profiler attaches to running process free included with JDK

JConsole

JMap/JHat prints memory map of Java process

attaches to running process free included with JDK

JStack prints thread dump of Java process

attaches to running process free included with JDK

Basic Information

Sunday, November 10, 13

Page 110: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 111: Troubleshooting Live Java Web Applications

The File

Sunday, November 10, 13

Page 112: Troubleshooting Live Java Web Applications

The File

Sunday, November 10, 13

Page 113: Troubleshooting Live Java Web Applications

New Relic

Application Performance Monitoring (APM) tool that monitors web

apps, mobile apps, servers, and databases

Sign up and download agent from the New Relic Website

Sunday, November 10, 13

Page 114: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 115: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 116: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 117: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 118: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 119: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 120: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 121: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 122: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 123: Troubleshooting Live Java Web Applications

/** Stores stats on the last names of runners which have been queried. */public class RunnerStatsServiceImpl implements RunnerStatsService { /** Stores the last name of queried runners. */ private final Queue<String> lastNamesQueried = new ArrayBlockingQueue<String>(100);

/** * Adds the last name input value to the stats service. * @param lastName A last name that was queried. */ public void addEntries(String lastName) { if (lastName != null && !lastName.isEmpty()) { while (!lastNamesQueried.offer(lastName.trim())) { try { Thread.sleep(100); } catch (InterruptedException e) { // ignore this exception } } } }

/** * Processes the last name stats currently held in the service. */ public void processLastNameStats() { . . . }

Sunday, November 10, 13

Page 124: Troubleshooting Live Java Web Applications

/** Stores stats on the last names of runners which have been queried. */public class RunnerStatsServiceImpl implements RunnerStatsService { /** Stores the last name of queried runners. */ private final Queue<String> lastNamesQueried = new ArrayBlockingQueue<String>(100);

/** * Adds the last name input value to the stats service. * @param lastName A last name that was queried. */ public void addEntries(String lastName) { if (lastName != null && !lastName.isEmpty()) { while (!lastNamesQueried.offer(lastName.trim())) { try { Thread.sleep(100); } catch (InterruptedException e) { // ignore this exception } } } }

/** * Processes the last name stats currently held in the service. */ public void processLastNameStats() { . . . }

Where the threads are sleeping

Sunday, November 10, 13

Page 125: Troubleshooting Live Java Web Applications

/** Stores stats on the last names of runners which have been queried. */public class RunnerStatsServiceImpl implements RunnerStatsService { /** Stores the last name of queried runners. */ private final Queue<String> lastNamesQueried = new ArrayBlockingQueue<String>(100);

/** * Adds the last name input value to the stats service. * @param lastName A last name that was queried. */ public void addEntries(String lastName) { if (lastName != null && !lastName.isEmpty()) { while (!lastNamesQueried.offer(lastName.trim())) { try { Thread.sleep(100); } catch (InterruptedException e) { // ignore this exception } } } }

/** * Processes the last name stats currently held in the service. */ public void processLastNameStats() { . . . }

Where the threads are sleeping

queue limited to 100 strings

Sunday, November 10, 13

Page 126: Troubleshooting Live Java Web Applications

/** Stores stats on the last names of runners which have been queried. */public class RunnerStatsServiceImpl implements RunnerStatsService { /** Stores the last name of queried runners. */ private final Queue<String> lastNamesQueried = new ArrayBlockingQueue<String>(100);

/** * Adds the last name input value to the stats service. * @param lastName A last name that was queried. */ public void addEntries(String lastName) { if (lastName != null && !lastName.isEmpty()) { while (!lastNamesQueried.offer(lastName.trim())) { try { Thread.sleep(100); } catch (InterruptedException e) { // ignore this exception } } } }

/** * Processes the last name stats currently held in the service. */ public void processLastNameStats() { . . . }

Where the threads are sleeping

queue limited to 100 strings

Sunday, November 10, 13

Page 127: Troubleshooting Live Java Web Applications

Key Takeaway

Do not block threads

Sunday, November 10, 13

Page 128: Troubleshooting Live Java Web Applications

The File

Sunday, November 10, 13

Page 129: Troubleshooting Live Java Web Applications

The File

waiting for more requests to come in

Sunday, November 10, 13

Page 130: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 131: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 132: Troubleshooting Live Java Web Applications

Image From: http://www.webrun.com.br/multimidia/fotos/2011/20110926_175711_g.jpg

Sunday, November 10, 13

Page 133: Troubleshooting Live Java Web Applications

Image From: http://www.webrun.com.br/multimidia/fotos/2011/20110926_175711_g.jpg

Patrick Makau Musyoki

Previous Marathon World Record Holder

Sunday, November 10, 13

Page 134: Troubleshooting Live Java Web Applications

Image From: http://simonfreeman.co.uk/wp-content/uploads/2013/04/image-4.jpeg

I tried to look for marathons on your site but could not access it

Sunday, November 10, 13

Page 135: Troubleshooting Live Java Web Applications

Lets Investigate!

Sunday, November 10, 13

Page 136: Troubleshooting Live Java Web Applications

JConsole

Graphical User Interface (GUI) which displays Java Management

Extension (JMX) metrics for a local or remote JVMs

JMX metrics should be enabled in your application server

Sunday, November 10, 13

Page 137: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit profiler restart or attachfeature dependent all features at cost www.yourkit.com

JVisualVm profiler attaches to running process free included with JDK

JConsole JMX metrics attaches to running process free included with JDK

JMap/JHat prints memory map of Java process

attaches to running process free included with JDK

JStack prints thread dump of Java process

attaches to running process free included with JDK

Basic Information

Sunday, November 10, 13

Page 138: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 139: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 140: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 141: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 142: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 143: Troubleshooting Live Java Web Applications

JVM specific mbeans

Sunday, November 10, 13

Page 144: Troubleshooting Live Java Web Applications

Tomcat Application Server mbeans

JVM specific mbeans

Sunday, November 10, 13

Page 145: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 146: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 147: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 148: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 149: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 150: Troubleshooting Live Java Web Applications

Can you do this in JVisualVM?

Sunday, November 10, 13

Page 151: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 152: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 153: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 154: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 155: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 156: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 157: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 158: Troubleshooting Live Java Web Applications

Tomcat Application Server mbeans

JVM specific mbeans

Sunday, November 10, 13

Page 159: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 160: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 161: Troubleshooting Live Java Web Applications

New Relic

Application Performance Monitoring (APM) tool that monitors web

apps, mobile apps, servers, and databases

Sign up and download agent from the New Relic Website

Sunday, November 10, 13

Page 162: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 163: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 164: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 165: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 166: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 167: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 168: Troubleshooting Live Java Web Applications

The File vi tomcat/config/server.xml

Sunday, November 10, 13

Page 169: Troubleshooting Live Java Web Applications

The File vi tomcat/config/server.xml

Sunday, November 10, 13

Page 170: Troubleshooting Live Java Web Applications

The File vi tomcat/config/server.xml

Sunday, November 10, 13

Page 171: Troubleshooting Live Java Web Applications

What Should Be The Size Of The Pool?

• If the pool size is too small, then requests back up

Image From: http://terrortrendsbulletin.files.wordpress.com/2012/11/airport-security-lines1.jpg

Sunday, November 10, 13

Page 172: Troubleshooting Live Java Web Applications

What Should Be The Size Of The Pool?

• If the pool size is too large, then system resources

might become exhausted

Sunday, November 10, 13

Page 173: Troubleshooting Live Java Web Applications

What Should Be The Size Of The Pool?

• If the pool size is too large, then system resources

might become exhausted

Images From: http://static.ddmcdn.com/gif/airport-security-detector1.jpg, http://graphics8.nytimes.com/images/2012/10/07/travel/07GETAWAY_SPAN/07GETAWAY_SPAN-articleLarge.jpg

Sunday, November 10, 13

Page 174: Troubleshooting Live Java Web Applications

What Should Be The Size Of The Pool?

• Pool size limiting factors

– The amount of memory

• In Java 6, the default thread stack size on Sparc is 512k for the

32-bit VM and 1024k for the 64-bit VM

Hotspot Thread Stack Numbers: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html

Sunday, November 10, 13

Page 175: Troubleshooting Live Java Web Applications

What Should Be The Size Of The Pool?

• Pool size limiting factors

– The amount of memory

• In Java 6, the default thread stack size on Sparc is 512k for the

32-bit VM and 1024k for the 64-bit VM

–The number of CPUs

• Context switching could become an issue

Hotspot Thread Stack Numbers: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html

Sunday, November 10, 13

Page 176: Troubleshooting Live Java Web Applications

Key Takeaway

Thread pools need to be tuned

Sunday, November 10, 13

Page 177: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 178: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 179: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 180: Troubleshooting Live Java Web Applications

Image From: http://coedmagazine.files.wordpress.com/2012/08/carmelita-jeter-7.jpg

Sunday, November 10, 13

Page 181: Troubleshooting Live Java Web Applications

Image From: http://coedmagazine.files.wordpress.com/2012/08/carmelita-jeter-7.jpg

Carmelita JeterFastest Woman Alive in the

100 meter sprint

Sunday, November 10, 13

Page 182: Troubleshooting Live Java Web Applications

Image From: http://www4.pictures.zimbio.com/gi/Carmelita+Jeter+Olympics+Day+14+Athletics+G48Jqgqo2nml.jpg

My team’s 4x100 time is faster than your website.

Get that fixed!

Sunday, November 10, 13

Page 183: Troubleshooting Live Java Web Applications

Lets Investigate!

Sunday, November 10, 13

Page 184: Troubleshooting Live Java Web Applications

Logs

Application, server, and database logs provide information developers

consider important for evaluating the status of the application

The quality of the logs varies significantly between products

Tools like Splunk and Loggly can help analyze logs

Sunday, November 10, 13

Page 185: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs application, server, framework, database depends free depends

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit profiler restart or attachfeature dependent all features at cost www.yourkit.com

JVisualVm profiler attaches to running process free included with JDK

JConsole JMX metrics attaches to running process free included with JDK

JMap/JHat prints memory map of Java process

attaches to running process free included with JDK

JStack prints thread dump of Java process

attaches to running process free included with JDK

Basic Information

Sunday, November 10, 13

Page 186: Troubleshooting Live Java Web Applications

The File The Application Log

Sunday, November 10, 13

Page 187: Troubleshooting Live Java Web Applications

The File The Application Log

Sunday, November 10, 13

Page 188: Troubleshooting Live Java Web Applications

The File The Application Log

Sunday, November 10, 13

Page 189: Troubleshooting Live Java Web Applications

The File The App Server Log

Sunday, November 10, 13

Page 190: Troubleshooting Live Java Web Applications

The File host_access_log

Sunday, November 10, 13

Page 191: Troubleshooting Live Java Web Applications

The File host_access_log

Sunday, November 10, 13

Page 192: Troubleshooting Live Java Web Applications

The File catalina.out

Sunday, November 10, 13

Page 193: Troubleshooting Live Java Web Applications

The File catalina.out

Sunday, November 10, 13

Page 194: Troubleshooting Live Java Web Applications

The File catalina.out

Sunday, November 10, 13

Page 195: Troubleshooting Live Java Web Applications

The File applicationContext.xml

Sunday, November 10, 13

Page 196: Troubleshooting Live Java Web Applications

The File applicationContext.xml

Sunday, November 10, 13

Page 197: Troubleshooting Live Java Web Applications

The File MySql Logs

Sunday, November 10, 13

Page 198: Troubleshooting Live Java Web Applications

The File MySql Logs - error log

Sunday, November 10, 13

Page 199: Troubleshooting Live Java Web Applications

The File MySql Logs - slow sql config

Sunday, November 10, 13

Page 200: Troubleshooting Live Java Web Applications

The File MySql Logs - slow sql log

Sunday, November 10, 13

Page 201: Troubleshooting Live Java Web Applications

The File MySql Logs - slow sql log

Query Time Rows Examined

Sunday, November 10, 13

Page 202: Troubleshooting Live Java Web Applications

The File MySql Logs - slow sql log

Query Time Rows Examined

Sunday, November 10, 13

Page 203: Troubleshooting Live Java Web Applications

New Relic

Application Performance Monitoring (APM) tool that monitors web

apps, mobile apps, servers, and databases

Sign up and download agent from the New Relic Website

Sunday, November 10, 13

Page 204: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 205: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 206: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 207: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 208: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 209: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 210: Troubleshooting Live Java Web Applications

Sunday, November 10, 13

Page 211: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 212: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 213: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 214: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 215: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 216: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 217: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 218: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 219: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 220: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 221: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 222: Troubleshooting Live Java Web Applications

Key Takeaway

Use indexes appropriately

Sunday, November 10, 13

Page 223: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 224: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 225: Troubleshooting Live Java Web Applications

In a Terminal

Sunday, November 10, 13

Page 226: Troubleshooting Live Java Web Applications

Tools App Response Time

Database Response Time Thread State Thread Pool

State Memory

Logs

New Relic

YourKit

JVisualVm

JConsole

JMap/JHat

JStack

Data In Tool

Sunday, November 10, 13

Page 227: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs application, server, framework, database depends free depends

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com

YourKit profiler restart or attachfeature dependent all features at cost www.yourkit.com

JVisualVm profiler attaches to running process free included with JDK

JConsole JMX metrics attaches to running process free included with JDK

JMap/JHat prints memory map of Java process

attaches to running process free included with JDK

JStack prints thread dump of Java process

attaches to running process free included with JDK

Basic Information

Sunday, November 10, 13

Page 228: Troubleshooting Live Java Web Applications

Tools Application Response Time

JConsole

JVisualVm - No Profiler

New Relic

JStack

Logs

Your Kit - No Profiler

JMap

Your Kit - With Profiler

JVisualVM - With Profiler

Basic Information

What is the impact of each tool?

Sunday, November 10, 13

Page 229: Troubleshooting Live Java Web Applications

Tools Application Response Time

JConsole None

JVisualVm - No Profiler None

New Relic Low

JStack Low

Logs Low - High

Your Kit - No Profiler High

JMap High

Your Kit - With Profiler Very High

JVisualVM - With Profiler Very High

Basic Information

Sunday, November 10, 13

Page 230: Troubleshooting Live Java Web Applications

Tools Application Response Time

JConsole None

JVisualVm - No Profiler None

New Relic Low

JStack Low

Logs Low - High

Your Kit - No Profiler High

JMap High

Your Kit - With Profiler Very High

JVisualVM - With Profiler Very High

Basic Information

Use In Production

Sunday, November 10, 13

Page 231: Troubleshooting Live Java Web Applications

Tools Application Response Time

JConsole None

JVisualVm - No Profiler None

New Relic Low

JStack Low

Logs Low - High

Your Kit - No Profiler High

JMap High

Your Kit - With Profiler Very High

JVisualVM - With Profiler Very High

Basic Information

Use In Production

Use In Development

Sunday, November 10, 13

Page 232: Troubleshooting Live Java Web Applications

Tools Overview Installation Cost Where to Find It For Production

Logs application, server, framework, database depends free depends yes

New Relic APM solution restart app with agent

basic free, advanced cost www.newrelic.com yes

YourKit profiler restart or attachfeature dependent all features at cost www.yourkit.com no

JVisualVm profiler attaches to running process free included with JDK basic: yes,

profiler: no

JConsole JMX metrics attaches to running process free included with JDK yes

JMap/JHat prints memory map of Java process

attaches to running process free included with JDK no

JStack prints thread dump of Java process

attaches to running process free included with JDK yes

Basic Information

Sunday, November 10, 13

Page 233: Troubleshooting Live Java Web Applications

Image From: http://www.tbkconsult.com/blog/wp-content/uploads/2011/07/Toolbox.jpg

I encourage you to add a new tool to your tool box

Sunday, November 10, 13

Page 234: Troubleshooting Live Java Web Applications

Image From: http://www.tbkconsult.com/blog/wp-content/uploads/2011/07/Toolbox.jpg

I encourage you to add a new tool to your tool box

Add the tool sooner rather than later

Sunday, November 10, 13

Page 235: Troubleshooting Live Java Web Applications

Image From: http://www.mediaemerging.com/wp-content/uploads/2010/11/Wrong-Tool-for-the-Job2.jpg

You should learn how to use the tools before you need them

Sunday, November 10, 13

Page 237: Troubleshooting Live Java Web Applications

Questions?

Ashley [email protected]

Sunday, November 10, 13


Recommended