Difference between revisions of "Tracking Memory Leaks"

From Event-B
Jump to navigationJump to search
imported>Mathieu
m (Imported from http://rodin-b-sharp.wiki.sourceforge.net/Tracking+Memory+Leaks)
 
imported>Mathieu
m (typo)
Line 1: Line 1:
It can happen that a plug-in consumes a lot of memory, and, worse, never
+
It can happen that a plug-in consumes a lot of memory, and, worse, never releases it. This recently happened to the new Predicate Prover
releases it. This recently happened to the new Predicate Prover
+
plug-in. While looking for a proof, it was allocating megabytes of memory, and upon cancellation the memory was not garbage collected. This
plug-in. While looking for a proof, it was allocating megabytes of
+
impeded seriously proving, as attempting to use this prover was allocating memory that was never freed. Users then had to manually
memory, and upon cancellation the memory was not garbage collected. This
+
restart the platform every third or fourth attempt of using this prover.  
impeded seriously proving, as attempting to use this prover was
 
allocating memory that was never freed. Users then had to manually
 
restart the platform every third or fourth attempt of using this prover.
 
  
This document explains how such memory leaks can be examined and how one
+
This document explains how such memory leaks can be examined and how one can trace their origin using simple useful tools. The proposed method
can trace their origin using simple useful tools. The proposed method
+
consists in using the JVM heap dump feature, together with an external tool for inquiring into a heap dump.
consists in using the JVM heap dump feature, together with an external
 
tool for inquiring into a heap dump.
 
  
 
==Producing a Heap Dump==
 
==Producing a Heap Dump==
  
This document supposes that the standard JVM from Sun (or the one
+
This document supposes that the standard JVM from Sun (or the one bundled with Mac OS X) is used.
bundled with Mac OS X) is used.
 
  
To produce a heap dump, add the following VM argument to the command
+
To produce a heap dump, add the following VM argument to the command used to launch the platform (e.g., in the {{menu|Arguments}} tab of the {{menu|Run}} dialog of Eclipse):
used to launch the platform (e.g., in the {{menu|Arguments}} tab of the
 
{{menu|Run}} dialog of Eclipse):
 
 
<pre>
 
<pre>
 
   -Xrunhprof:format=b,file=/tmp/xx.hprof
 
   -Xrunhprof:format=b,file=/tmp/xx.hprof
 
</pre>
 
</pre>
  
When given this argument, he JVM will write in the specified file (here
+
When given this argument, he JVM will write in the specified file (here {{file|/tmp/xx.hprof}}) a copy of the heap upon program termination. It is also possible to force a heap dump while the application is running by sending a QUIT signal (number 3) to the JVM while it is running (I don't know how to do that on Windows platforms).
{{file|/tmp/xx.hprof}}) a copy of the heap upon program termination. It is
 
also possible to force a heap dump while the application is running by
 
sending a QUIT signal (number 3) to the JVM while it is running (I don't
 
know how to do that on Windows platforms).
 
  
 
==Analysing a Heap Dump==
 
==Analysing a Heap Dump==
  
With the Java 6 JDK, there is a bundled tool called {{ident|jhat}} that allows
+
With the Java 6 JDK, there is a bundled tool called {{ident|jhat}} that allows to analyse a heap dump. However, SAP developed another tool based on
to analyse a heap dump. However, SAP developed another tool based on
+
Eclipse which is more user-friendly and easy to use. This tool is available from (free registration required):
Eclipse which is more user-friendly and easy to use. This tool is
 
available from (free registration required):
 
  
 
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Java/Java+Memory+Analysis
 
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Java/Java+Memory+Analysis
  
The online help of the tool is very well done and gives various strategies
+
The online help of the tool is very well done and gives various strategies for analysing the allocated memory at the time of the dump.
for analysing the allocated memory at the time of the dump.
 

Revision as of 10:56, 10 November 2008

It can happen that a plug-in consumes a lot of memory, and, worse, never releases it. This recently happened to the new Predicate Prover plug-in. While looking for a proof, it was allocating megabytes of memory, and upon cancellation the memory was not garbage collected. This impeded seriously proving, as attempting to use this prover was allocating memory that was never freed. Users then had to manually restart the platform every third or fourth attempt of using this prover.

This document explains how such memory leaks can be examined and how one can trace their origin using simple useful tools. The proposed method consists in using the JVM heap dump feature, together with an external tool for inquiring into a heap dump.

Producing a Heap Dump

This document supposes that the standard JVM from Sun (or the one bundled with Mac OS X) is used.

To produce a heap dump, add the following VM argument to the command used to launch the platform (e.g., in the Arguments tab of the Run dialog of Eclipse):

  -Xrunhprof:format=b,file=/tmp/xx.hprof

When given this argument, he JVM will write in the specified file (here

/tmp/xx.hprof

) a copy of the heap upon program termination. It is also possible to force a heap dump while the application is running by sending a QUIT signal (number 3) to the JVM while it is running (I don't know how to do that on Windows platforms).

Analysing a Heap Dump

With the Java 6 JDK, there is a bundled tool called

jhat

that allows to analyse a heap dump. However, SAP developed another tool based on

Eclipse which is more user-friendly and easy to use. This tool is available from (free registration required):

https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Java/Java+Memory+Analysis

The online help of the tool is very well done and gives various strategies for analysing the allocated memory at the time of the dump.