Troubleshooting Live Java Web Applications

Post on 06-May-2015

473 views 7 download

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.

transcript

Troubleshooting Live Java Web Applications

By Ashley Puls

Sunday, November 10, 13

Sunday, November 10, 13

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

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

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

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

What is the Application?

Sunday, November 10, 13

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

What is the Application?

MySQL Database

hibernate

racerunners.war

jsp

Client

Client

Client

Servlet

Controller

Manager

Entities

Tomcat Application Server

Sunday, November 10, 13

Should we Jump into Troubleshooting?

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

Sunday, November 10, 13

What is Trouble?

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

Sunday, November 10, 13

What is Trouble?Site Inaccessible

Sunday, November 10, 13

What is Trouble?Site Inaccessible

ExceptionsIn Logs

Sunday, November 10, 13

What is Trouble?Site Inaccessible

ExceptionsIn Logs

Loading Slowly

Sunday, November 10, 13

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

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

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

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

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

Lets Talk to Some of Our Users

Sunday, November 10, 13

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

Sunday, November 10, 13

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

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

Lets Investigate!

Sunday, November 10, 13

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

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

Sunday, November 10, 13

Application Response Time

Sunday, November 10, 13

Application Response Time

Sunday, November 10, 13

Application Response Time

Sunday, November 10, 13

Sunday, November 10, 13

YourKit

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

Get license key and download from YourKit Website

Sunday, November 10, 13

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

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

CPU Profiler

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

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

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

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Heap Memory

Sunday, November 10, 13

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

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

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

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

The File

Sunday, November 10, 13

The File

Heap Memory

Sunday, November 10, 13

The File

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

The File

Heap Memory

Non-Heap Memory

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

The File

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

YourKit

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

Get license key and download from YourKit Website

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Non-Heap Memory

Heap Memory

Sunday, November 10, 13

Non-Heap Memory

Heap Memory

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

/** * 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

/** * 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

/** * 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

/** * 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

Key Takeaway

Clean up memory in long running objects

Sunday, November 10, 13

The File

Sunday, November 10, 13

The File

Sunday, November 10, 13

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

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

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

Sunday, November 10, 13

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

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

Lets Investigate!

Sunday, November 10, 13

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

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

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Memory Information

Sunday, November 10, 13

Memory Information

Sunday, November 10, 13

Memory Information

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

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

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

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

In a Terminal

Sunday, November 10, 13

The File

Sunday, November 10, 13

The File

Sunday, November 10, 13

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

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

/** 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

/** 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

/** 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

/** 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

Key Takeaway

Do not block threads

Sunday, November 10, 13

The File

Sunday, November 10, 13

The File

waiting for more requests to come in

Sunday, November 10, 13

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

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

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

Sunday, November 10, 13

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

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

Lets Investigate!

Sunday, November 10, 13

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

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

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

JVM specific mbeans

Sunday, November 10, 13

Tomcat Application Server mbeans

JVM specific mbeans

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Can you do this in JVisualVM?

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Tomcat Application Server mbeans

JVM specific mbeans

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

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

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

The File vi tomcat/config/server.xml

Sunday, November 10, 13

The File vi tomcat/config/server.xml

Sunday, November 10, 13

The File vi tomcat/config/server.xml

Sunday, November 10, 13

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

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

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

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

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

Key Takeaway

Thread pools need to be tuned

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

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

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

Sunday, November 10, 13

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

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

Lets Investigate!

Sunday, November 10, 13

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

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

The File The Application Log

Sunday, November 10, 13

The File The Application Log

Sunday, November 10, 13

The File The Application Log

Sunday, November 10, 13

The File The App Server Log

Sunday, November 10, 13

The File host_access_log

Sunday, November 10, 13

The File host_access_log

Sunday, November 10, 13

The File catalina.out

Sunday, November 10, 13

The File catalina.out

Sunday, November 10, 13

The File catalina.out

Sunday, November 10, 13

The File applicationContext.xml

Sunday, November 10, 13

The File applicationContext.xml

Sunday, November 10, 13

The File MySql Logs

Sunday, November 10, 13

The File MySql Logs - error log

Sunday, November 10, 13

The File MySql Logs - slow sql config

Sunday, November 10, 13

The File MySql Logs - slow sql log

Sunday, November 10, 13

The File MySql Logs - slow sql log

Query Time Rows Examined

Sunday, November 10, 13

The File MySql Logs - slow sql log

Query Time Rows Examined

Sunday, November 10, 13

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

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

Key Takeaway

Use indexes appropriately

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

In a Terminal

Sunday, November 10, 13

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

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

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

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

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

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

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

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

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

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

Questions?

Ashley Pulsashley@newrelic.com

Sunday, November 10, 13