【发布时间】:2011-04-15 14:27:24
【问题描述】:
我们在 Tomcat 5.5.27、PostgreSQL 8.3 上使用 Liferay Portal 5.2.3(带有 Hibernate 和 C3P0)。 通常,c3p0 汇集连接并将其返回以供重用。但有时我们需要及时进行大量更新,而 postgreSQL 关闭后并没有释放连接(我们可以看到 100 个 IDLE 连接)。此外,该问题仅在 Linux (Debian 5.0) 上重现。 连接是由独立线程建立的,在 run() 方法的 finally 块中,我们总是关闭它。 我试过不使用 pool 并写了简单的 DBConnection manager (getConnection() -> runQuery() -> closeConnection()),但是 PostgreSQL 没有发布它。
【问题讨论】:
-
拥有这些空闲连接会导致问题吗?查看 c3p0 文档了解如何设置最大空闲连接数。
-
是的,这是一个大问题 - 我们收到错误“用户已经太多”(我们无法将连接数增加到无穷大)。我玩过 c3p0 设置 - 它调用 connection.close(),但在 Postgre 端它仍然是空闲进程。正如我所提到的,我也尝试在没有 c3p0 的情况下使用它。
-
如果您找到了解决方案,请回答这个问题,这听起来很有趣。
-
"PostgreSQL 不释放连接"。那是对的。 client 必须释放连接。如果您的连接没有关闭,则说明您的应用程序有问题,而不是服务器。
-
我调用了connection.close(),但它仍然在服务器上占用。据我所知,PostgreSQL 将其返回到自己的池中以供重用,但是当我建立新连接时,postgre 不会从池中获取它。
标签: java postgresql jdbc