2012-04-27 135 views
2

环境: 服务器:Jboss的4.2.3.GA内存泄漏 - java.lang.NoClassDefFoundError:COM/mchange/V2/resourcepool/BasicResourcePool

我们正在使用C3P0 0.9.1.2连接池。

无论何时我们热部署 Jboss AS中的war文件遇到来自c3p0的内存泄漏。 它最终导致“java.lang.OutOfMemoryError:PermGen空间”错误,我们被迫重启我们的应用服务器。

有没有人遇到过这个问题?有没有解决这个问题的方法?

堆栈跟踪如下:

14:50:16,097 INFO [WebappClassLoader] Illegal access: this web application instance has been stopped already. Could not load com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. 
java.lang.IllegalStateException 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) 
    at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980) 
    at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406) 
    at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378) 
    at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462) 
    at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32) 
    at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937) 
    at java.util.TimerThread.mainLoop(Timer.java:512) 
    at java.util.TimerThread.run(Timer.java:462) 
14:50:22,328 ERROR [STDERR] Exception in thread "Timer-5" 
14:50:22,329 ERROR [STDERR] java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$1DestroyResourceTask 
14:50:22,329 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980) 
14:50:22,329 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406) 
14:50:22,329 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378) 
14:50:22,329 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462) 
14:50:22,329 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32) 
14:50:22,329 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937) 
14:50:22,329 ERROR [STDERR]  at java.util.TimerThread.mainLoop(Timer.java:512) 
14:50:22,329 ERROR [STDERR]  at java.util.TimerThread.run(Timer.java:462) 
14:50:22,329 ERROR [STDERR] Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask 
14:50:22,329 ERROR [STDERR]  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358) 
14:50:22,329 ERROR [STDERR]  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) 
14:50:22,329 ERROR [STDERR]  ... 8 more 
14:50:23,081 ERROR [STDERR] Exception in thread "Timer-6" 
14:50:23,082 ERROR [STDERR] java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$1DestroyResourceTask 
14:50:23,082 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980) 
14:50:23,082 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406) 
14:50:23,082 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378) 
14:50:23,082 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462) 
14:50:23,082 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32) 
14:50:23,082 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937) 
14:50:23,082 ERROR [STDERR]  at java.util.TimerThread.mainLoop(Timer.java:512) 
14:50:23,083 ERROR [STDERR]  at java.util.TimerThread.run(Timer.java:462) 
14:51:59,105 INFO [WebappClassLoader] Illegal access: this web application instance has been stopped already. Could not load com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. 
java.lang.IllegalStateException 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) 
    at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980) 
    at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406) 
    at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378) 
    at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462) 
    at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32) 
    at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937) 
    at java.util.TimerThread.mainLoop(Timer.java:512) 
    at java.util.TimerThread.run(Timer.java:462) 
^[[1;2C14:56:03,597 ERROR [STDERR] Exception in thread "Timer-11" 
14:56:03,598 ERROR [STDERR] java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$1DestroyResourceTask 
14:56:03,598 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980) 
14:56:03,598 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406) 
14:56:03,598 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378) 
14:56:03,598 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462) 
14:56:03,598 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32) 
14:56:03,598 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937) 
Listening for transport dt_socket at address: 8787 
14:56:03,598 ERROR [STDERR]  at java.util.TimerThread.mainLoop(Timer.java:512) 
14:56:03,598 ERROR [STDERR]  at java.util.TimerThread.run(Timer.java:462) 
14:56:03,598 ERROR [STDERR] Exception in thread "Timer-10" 
14:56:03,607 ERROR [STDERR] java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$1DestroyResourceTask 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937) 
14:56:03,607 ERROR [STDERR]  at java.util.TimerThread.mainLoop(Timer.java:512) 
14:56:03,607 ERROR [STDERR]  at java.util.TimerThread.run(Timer.java:462) 
14:56:03,607 ERROR [STDERR] Exception in thread "Timer-9" 
14:56:03,607 ERROR [STDERR] java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$1DestroyResourceTask 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32) 
14:56:03,607 ERROR [STDERR]  at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937) 
14:56:03,607 ERROR [STDERR]  at java.util.TimerThread.mainLoop(Timer.java:512) 
14:56:03,607 ERROR [STDERR]  at java.util.TimerThread.run(Timer.java:462) 
14:56:03,607 ERROR [STDERR] Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask 
14:56:03,607 ERROR [STDERR]  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358) 
14:56:03,607 ERROR [STDERR]  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) 
14:56:03,607 ERROR [STDERR]  ... 8 more 

回答

5

Whenever we hot-deploy war files in Jboss AS are encountering the memory leak from c3p0.

如果您在JBoss的4.2热部署(或任何其他版本的JBoss的),你最终会泄漏内存在PermGen的池和服务器将需要重启。没有我知道的解决方法,它与c3p0无关。

在开发中,这只是一个小小的烦恼。在生产中,你根本不应该这样做。

+2

Aaaand别人应该做点什么。但它是一个长期的讨论。 – Mindwin 2013-03-28 18:52:23

+0

我相信没有人会为此做点什么。我很高兴我现在正在使用mongodb。 – aspdeepak 2014-07-14 14:20:05