C3P0创建过多的线程和定时器

时间:2011-07-11 14:00:14

标签: java multithreading hibernate pool c3p0

我在Tomcat上运行了一个Java webapp,使用了Hibernate和C3P0。所有实体类和JPA控制器都是使用Netbeans wizzard完成的。调用时有一个servlet在数据库中插入许多对象(使用JPA控制器)。

问题是用Java VisualVM查看我的webapp我发现有很多Timers和com.mchange.v2.async.ThreadPoolAsynchronousRunner类,它随着时间的推移而增长。对于每个Timer,创建了3个线程。

所有的线程和计时器都处于WAIT状态,我认为这个问题可能是应用程序的OutOfMemory错误(Java堆空间)的背后。产生。即使我在MySQL Administrator上看到当servlet结束任务时所有连接都已关闭,但是某些对象仍然可能在内存中。

C3P0在“等待”状态下创建超过700个Timeras和2100个线程是否正常?

由于

埃塞基耶尔

1 个答案:

答案 0 :(得分:-2)

由于你没有发布任何代码,我只能猜测,但这听起来很像你正在创建大量的池。 您应确保实际重用一个池,而不是每次需要连接时创建一个池。

同样的事情发生在我身上(偶然)。虽然我没有遇到OutOfMemory,但是达到了数据库服务器上的max-connection-limit。