2012-04-27 133 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