Published on Aug 17 2012 in Java Tomcat

We show 2 methods of installing JProfiler agent and accessing JVM to be profiled from remote location.

JProfiler is an award-winning all-in-one Java profiler and an alternative to jvisualvm. JProfiler’s GUI helps you detect performance bottlenecks, memory leaks and resolve threading issues. New features in 7.1 include i.a. JPA/Hibernate probe supporting Hibernate 3.x/4.x, EclipseLink 2.3+ and OpenJPA 2.1+. It is not cheap - comparing to jvisualvm ;) but some of you may have access to it’s license e.g. academic one or even qualify for open-source license.

As for remote access you will need a TCP port, login to Java Control Panel and on ‘Ports’ page determine a port number you are sure is not in use - for example one labelled OPENEJB_ADMIN or ask support for new port assignment for JProfiler exclusively.

Download JProfiler to your home directory and unpack it e.g.

tomcat@host[~]# wget http://download.ej-technologies.com/jprofiler/jprofiler_linux_7_1_2.tar.gz
tomcat@host[~]# tar xzf jprofiler_linux_7_1_2.tar.gz

Some of you may prefer to download RPM or shell installer. File locations may differ in that case.

Method 1: Start JProfiler with jpenable

Easier method for Java 1.6 or higher (which is rather typical version these days) but has the drawback that array allocations are not recorded, it means stack trace information for array allocations is not available. If you are profiling frequently you may prefer method 2 though.

tomcat@host[~]# jprofiler7/bin/jpenable 
Connecting to org.apache.catalina.startup.Bootstrap start [27574] ...
Please enter a profiling port
[31757]
11002

Download the same tarball to your linux PC (or correct one for you OS), unpack and run jprofiler from bin directory.

Here are some screenshots of running JProfiler.

jprofiler classes

Method 2: Add agentpath to JAVA_OPTS

Stop the JVM (you can use ‘jk’ shortcut command), add agentpath parameter to your JAVA_OPTS variable in ~/.bashrc and reread the file with ‘source ~/.bashrc’.
The library to be loaded is in our case {JProfiler install directory}/bin/linux-x64/libjprofilerti.so.

With jprofiler7 in your home directory and relative path, the example string to be added to JAVA_OPTS may look like

-agentpath:jprofiler7/bin/linux-x64/libjprofilerti.so=port=11002

Or you can use an absolute path to libjprofilerti.so instead. Start JVM with Java Control Panel or js shortcut command. Check logs if you cannot connect.

Note: If you change any JVM/appserver settings in Java Control Panel the agentpath parameter will be removed so you may want to readd it. Alternatively you can ask support to add it to your static parameter set so that it survives JVM/appserver changes.

jprofiler heap

The JProfiler Manual contains much interesting information on the profiling process, we recommend to read it in full to get most of JProfiler.