John Embretsen wrote:
Robert Harryman wrote:

Do you get similar results (references to java.util.logging.Logger) if you run the following query in jhat's OQL tool?

select referrers(f) from java.util.logging.Logger f

(lists Java objects that hold reference to java.util.logging.Logger)
I did not see any references in this result.

or for example

select referees(heap.findClass("org.apache.derby.impl.services.monitor.BaseMonitor"))

(returns an array of Java objects to which the given Java object directly refers to).
[ class java.lang.Class <http://localhost:7000/class/0xf7017d68>, class java.lang.Object <http://localhost:7000/class/0xf7017a68>, [EMAIL PROTECTED] <http://localhost:7000/object/0xf0049378>, [EMAIL PROTECTED] <http://localhost:7000/object/0xf0061fb0>, class org.apache.derby.iapi.services.monitor.PersistentService <http://localhost:7000/class/0xf7b41778>, class org.apache.derby.io.StorageFactory <http://localhost:7000/class/0xf7b405a0>, [EMAIL PROTECTED] <http://localhost:7000/object/0xf0062128>, [EMAIL PROTECTED] <http://localhost:7000/object/0xf7b3e730> ]

Is there a way from this result to tell what is keeping the derby objects alive? I can see jhat provides many useful methods to hunt with, I just don't have the skill yet to know what to hunt for. Since this is a container there appears to be a shared classloader in the in the ancestry, could it have something to
do with a class being shared?

I'm on very thin ice here, but yeah, I guess this could be related to shared classloaders. Anyway, I was just curious to see if those queries showed references to the logging API, which I would not have been able to explain. Your OQL results look similar to the results I get from running a short Derby test, which was somewhat comforting. There may be some OQL query or some other jhat feature that may be helpful, but unfortunately I don't have any specific suggestions at the moment. Others are welcome to chime in!

You mentioned that you would eventually run out of PermSpace memory if you do not do anything about this. Did you actually test that, so that you know it for a fact?
I did not push it to the limit but used jConsole's memory tab to watch a series of deploy/undeploys; Permgen just kept ratcheting up. That plus the inspection of objects remaining seemed good reason to try and find out why.


There was an issue [1] recently with OutOfMemoryErrors after repeated calls to boot and shutdown a database, it may or may not be related. It has been fixed in the trunk (and will be included in the next feature release). If you do run out of memory, and nothing else helps, you may want to try out some jars from a trunk build (see [2] for easy access).
It sure seems related. Is there a trail of that on this archive? Sorry, this is my first exposure to derby so I'm groping a bit.
Thanks again.

Reply via email to