4

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

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

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

C3P0 创建的 700 多个 Timeras 和 2100 个线程处于“WAIT”状态是否正常?

谢谢

以西结

4

1 回答 1

-1

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

同样的事情发生在我身上一次(偶然)。虽然我没有遇到 OutOfMemory,但在数据库服务器上达到了最大连接限制。

于 2011-07-14T18:23:41.513 回答