【问题标题】:PostgreSQL doesn't close connectionsPostgreSQL 不关闭连接
【发布时间】: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


【解决方案1】:

嗯...这是代码中的问题(一个坏人没有关闭连接)

【讨论】:

  • 关于追踪这类问题的任何提示?
  • 当我们连接到数据库时,我手动检查了所有地方。在其中一些中,没有调用 close() 方法。
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多