db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alan Burlison <Alan.Burli...@sun.com>
Subject Re: Derby causes PermGen leaks in Tomcat
Date Wed, 26 Sep 2007 22:49:23 GMT
John Embretsen wrote:

> I haven't seen any details of how you unload the embedded driver,

DriverManager.deregisterDriver(driver) where driver is obtained from 

> but 
> have you tried shutting down the Derby system explicitly as well as (or 
> instead of) shutting down the particular database?
> When I run a small test case (outside of Tomcat) I see the AntiGC thread 
> hanging around after doing:
>  - load embedded driver (with newInstance())

Which class has the newInstance() method?

>  - start the network server using the NetworkServerControl API
>  - shutdown database (example URL: "jdbc:derby:leakDB;shutdown=true")
>  - shutdown server (netServerControl.shutdown())
> However, when I do:
>  - load embedded driver (with newInstance())
>  - start the network server using the NetworkServerControl API
>  - shutdown Derby system (example URL: "jdbc:derby:;shutdown=true")
>  - shutdown server (netServerControl.shutdown())
> I don't see the AntiGC thread (using jstack).

Ahah!  I'm doing method 1 above, not method 2.  I think you've hit the 
nail on the head, I need to shut down the system, not just the 
individual database before shutting down the server.

> PermGen space usage seems to be fairly stable  at around 11-12 MB even 
> after several hundred iterations of either of the scenarios mentioned 
> above, so I'm not able to reproduce your case outside Tomcat (please 
> post if you are!). I suspect Tomcat may be a part of the problem here...

I suspect you are right - as far as I know Tomcat uses a custom 
classloader for each webapp, and PermGen leaks in Tomcat are a 
well-known 'feature'.

Alan Burlison

View raw message