Tracking Memory Leaks: Difference between revisions
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
tab of the dialog of Eclipse):-Xrunhprof:format=b,file=/tmp/xx.hprof
When given this argument, he JVM will write in the specified file (here
) 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
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.