JProfiler8 @ OVIRT

Post on 05-Jul-2015

471 views 1 download

description

Using JProfiler8 at the OVIRT project

transcript

Jprofiler 8 & OVIRT

Agenda

• Why profiling

• Installing Jprofiler

– Connecting Jprofiler to OVIRT

• Analyzing the results

– CPU analysis

– Memory analysis

– Threads analysis

– Database analysis

• "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil"

– Donald Knuth

Profiler

• Connects to running code and instruments the Java classes

• Application should run at least slower than without a profiler

• Gives a very good insight on what's going on inside our code

private static void test1() {

String s = "";

for (int i = 0; i < 100; ++i) {

s = s + "a";

}

}

private static void test2() {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < 100; ++i) {

sb.append("a");

}

}

private static StringBuffer sb = new StringBuffer();

private static void test3() {

sb.setLength(0);

for (int i = 0; i < 100; ++i) {

sb.append("a");

}

}

Pretty Code vs. Fast Code

• What’s the clearer code?

• What’s the faster code?

Installing JProfiler

• We have licenses to Jprofiler 8.

• Contact me for serial number information

– We were asked not to publish S/N

OpenJDK Issues

• Install Oracle Java

• Update alternatives –config java or just the jprofiler.sh script

# Uncomment the following line to override the JVM search sequenceINSTALL4J_JAVA_HOME_OVERRIDE=~/jre1.7.0_25# Uncomment the following line to add additional VM parameters# INSTALL4J_ADD_VM_PARAMS=

Configuring OVIRT

• Jprofiler automatic configuration updates jboss’s script files.

• Since we use ovirt-engine service, add the following line:

• I added it directly in /etc/init.d/ovirt-engine under engineArgs.extend, but other options are possible too

-agentpath:/root/jprofiler8/bin/linux-x64/libjprofilerti.so=port=8849,nowait

Jprofiler main page

• Create a new session

Connection Page

Analyzing Information

• CPU– Check method execution time – only Runnable or

any state

• Memory– Who allocates which objects

• Threads– To check for thread leaks, dead-locks, etc.

• Database– To check for query execution time

CPU

• CPU View

• Hotspots

– Inherent Time vs Avg Execution Time vs Num Of Executions

CPU

CPU

Memory

• Allocated objects

• Monitor GC activity

Live Memory

Threads

• State

• Thread snapshot

Threads

Database Access

• Connection status

• Hot spots

Database

Other Monitoring Capabilities

• Network

• HTTP servlets

Alternatives

• Don’t want a profiler? That’s fine. Other tools exist (can also assist in production):

– Jmap

• Heap status

– Jstack

• Thread status

– verboseGC

• GC duration