Last time CodeRanch has a memory leak, a teammate ran Eclipse Memory Analyzer and I ran JVisual VM. This time, I did both. I took the heap dump as described here. JVisual VM told me hibernate was using a ton of memory.
To run Eclipse Memory Analyzer, I needed to launch Eclipse with more memory. The default wasn’t enough to open the heap dump. On Windows, I would edit the eclipse.ini file. On Mac, I instead used a command line. (I have read that it is supposed to be possible to edit the eclipse.ini too. Didn’t work the once I tried it.)
./eclipse -vmargs -Xmx4g -XX:-UseGCOverheadLimit
(It was a production dump; just under 1 GB.)
What I learned
The Leak Suspects report was right on. It noted that the heap dump had three large Hibernate Session objects. I was only expecting one. We are using Entity Factory (which use Hibernate Session behind the scenes if using Hibernate JPA). It turned out there was some code which intended to to cache the entity factory, but in fact didn’t for some nightly jobs we have.