我在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个线程是否正常?
由于
埃塞基耶尔
答案 0 :(得分:-2)
由于你没有发布任何代码,我只能猜测,但这听起来很像你正在创建大量的池。 您应确保实际重用一个池,而不是每次需要连接时创建一个池。
同样的事情发生在我身上(偶然)。虽然我没有遇到OutOfMemory,但是达到了数据库服务器上的max-connection-limit。