JMemProf - Java Web-based Memory Profiler

NOTE: jmemprof uses the deprecated JVMPI interface which is no longer available in jdk6.

Latest release: jmemprof-0.8.tar.gz

JMemProf is a live Java memory profiler suitable for deployment in web containers such as JBoss, Tomcat and others. JMemProf allows you to retrieve memory profile information while your application is running.

Although Java implements automatic garbage collection, this does not solve the problem of programmers hanging onto references and thus causing memory leaks. ie. "if you don't put out your garbage, it won't get collected". JMemProf aims to add dynamic visibility to memory usage in Java web applications; memory profile information can be viewed easily through a Servlet based web interface while the application is running. It is much more dynamic and easily understandable than that of the hprof heap profiler bundled with the J2SDK.

Sample output from the JMemProf web interface.

JMemProf is implemented in C using the JVMPI (JVM Profiling Interface). There are two parts, a shared object loaded into the JVM at startup, and a WAR file containing a Java servlet that uses a JNI interface to the profiling extension to retrieve and display memory profile information collected during execution.

Currently working to some degree with the following JVMs:

JMemProf is highly portable and currently only uses <stdio.h>, <stdlib.h> and the JVMPI headers so should be able to be compiled and run on other *nix JVMs although so far it has only been tested on Linux and Windows.

JMemProf is alpha quality software and is not currently recommended to be run in a production environment.

Building and Installing

JMemProf requires ant 1.5.x for building and installing. Building on Windows also requires MinGW although the build could easily be amended for other compilers (patches welcome).

Please edit <>.properties and change the following properties:

  • jdk.home - to point to your JDK install directory
  • lib.dir - to point to where you want to install the library
  • deploy.dir - to point to where to install the .war file
  • Running ant install will build and copy the servlet to deploy.dir and the shared object to lib.dir.

    Then make the following changes to your JBoss, Tomcat or other web container start script:

    On Unix:

    export LD_LIBRARY_PATH=<location in lib.dir>
    java -Xrunjmemprof <normal startup arguments>

    On Windows:

    set PATH=%PATH%;<location in lib.dir>
    java -Xrunjmemprof <normal startup arguments>

    Once you have started your JVM then go to this URL: http://<your server>/jmemprof/JMemProf

    Bugs and Limitations

    Please send bug reports to

    Anonymous Subversion

    # svn co jmemprof-trunk

    To do

    Copyright Metaparadigm Pte. Ltd. 2003. Michael Clark

    This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public (LGPL) License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.