Java Profiling¶
- Table of contents
- Java Profiling
YourKit Java Profiler¶
Profile the cdmserver (cdmlib-remote-webapp)¶
Preparation:
To enable profiling on remote server you just need to copy appropriate libyjpagent.so and, put it into LD_LIBRARY_PATH and add "-agentlib:yjpagent" to JVM parameters. Most probable you copied wrong library file, that's why server JVM doesn't start.
( For another way to specify the shared lib see http://www.yourkit.com/docs/java/help/agent.jsp )
For your convenience you can use the following script to start eclipse and set the LD_LIBRARY_PATH:
#!/bin/bash ########################################### # Configuration # ECLIPSE_FOLDER=~/opt/eclipse-juno-SR2 YOURKIT_FOLDER=~/opt/yjp-9.0.8 OS_TYPE="linux-x86-64" # ########################################### export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${YOURKIT_FOLDER}/bin/${OS_TYPE} $ECLIPSE_FOLDER/eclipse -vmargs -Duser.name="a.kohlbecker"
Run cdmlib-remote-webapp in profiling mode:
Use the launch configuration cdmserver - profile which is distributed via the cdmlib source control.
Remote debug the cdm-server¶
add the following to the /etc/default/cdmserver
# # Enable remote profiling with yourkit # # JDK7: # To avoid the Java.lang.VerifyError: 'Expecting a stackmap frame at branch target' # add the below option to the JAVA_OPTIONS: # # -XX:-UseSplitVerifier # export LD_LIBRARY_PATH=/opt/yjp-9.0.8 JAVA_OPTIONS="$JAVA_OPTIONS -XX:-UseSplitVerifier -agentlib:yjpagent"
restart the server
create a ssh tunnel
ssh -f -N -L 10001:127.0.0.1:10001 developer@160.45.63.175
and connect to the yourkit client to 127.0.0.1:10001 (for testing the connection you can use telnet!)
creating a snapshot from within an application¶
IMPORTANT: Add yjp.jar
from the yourkit lib folder to the classpath. Do not move it from it's original location!!!!.
Capture a snapshot by
com.yourkit.api.Controller controller = new Controller(); controller.forceGC(); // decreases snapshot size and makes finding memory leaks easier controller.captureMemorySnapshot();
if you whant to do multiple snapshots you can also use the static method:
ProfilerController.memorySnapshot()
or create a method like the following in the class to be tested:
private void captureMemorySnapshot() { if (controller == null) { try { controller = new Controller(); } catch (Exception e) { e.printStackTrace(); } } try { controller.forceGC(); logger.info("capturing snapshot ... "); logger.info("new snapshot file: " + controller.captureMemorySnapshot()); } catch (Exception e) { e.printStackTrace(); } }
TPTP¶
_Using TPTP is discouraged, we rather recommend using the YourKit Java Profiler
in Eclipse by using TPTP.
Install TPTP as eclipse plugin using Eclipse update site Help -> Software updates -> Find and Install -> Search for new features to install -> check Europa Discovery Site" -> TPTP and select required or check "TPTP
Download and extract "Agent Controller" from http://www.eclipse.org/tptp/home/downloads/
execute bin\SetConfig.bat in extracted package. Set path to Java 1.5 (for cdmlib projects ?).
execute bin\RAServer.exe to start the Agent
start profiling from within eclipse ...
Updated by Andreas Müller almost 2 years ago · 25 revisions