On 9/18/2012 9:29 PM, Lance Norskog wrote:
There is a known JVM garbage collection bug that causes this. It has to do with 
reclaiming Weak references, I think in WeakHashMap. Concurrent garbage 
collection collides with this bug and the result is that old field cache data 
is retained after closing the index. The bug is more common with more 
processors doing GC simultaneously.

The symptom is that when you run a monitor, the memory usage rises to a peak, 
drops to a floor, rises again in the classic sawtooth pattern. When the GC bug 
happens, the ceiling becomes the floor, and the sawtooth goes from the new 
floor to a new ceiling. The two sizes are the same. So, 2G to 5G, over and 
over, suddenly it is 5G to 8G, over and over.

The bug is fixed in recent Java 7 releases. I'm sorry, but I cannot find the 
bug number.

I think I ran into this when I was looking at memory usage on my SolrJ indexing program. Under Java6, memory usage in jconsole (remotely via JMX) was fairly constant long-term (aside from the unavoidable sawtooth). When I ran it under Java 7u3, it would continually grow, slowly ... but if I measured it with jstat on the Linux commandline rather than remotely via jconsole under windows, memory usage was consistent over time, just like under java6 with the remote jconsole. After looking at heap dumps and scratching my head a lot, I finally concluded that I did not have a memory leak, there was a problem with remote JMX monitoring in java7. Glad to hear I was not imagining it, and that it's fixed now.

Thanks,
Shawn

Reply via email to