jprofiler8 @ ovirt
DESCRIPTION
Using JProfiler8 at the OVIRT projectTRANSCRIPT
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