3

昨晚玩突然无法再连接到数据库(同一个EC2实例上的PostGreSQL)。

23:57:31.996 [BoneCP-pool-watch-thread] 错误 com.jolbox.bonecp.hooks.AbstractConnectionHook {1}

- 获取连接失败 休眠 5000 毫秒并重试。剩余尝试次数:10。异常:null

有时,抛出的错误是不同的:

01:21:05.920 [BoneCP-pool-watch-thread] 错误 com.jolbox.bonecp.PoolWatchThread {1} - 尝试获取连接时出错。在 5000 毫秒内重试

org.postgresql.util.PSQLException:致命:剩余的连接槽保留用于非复制超级用户连接

它每 5 秒重试一次,但没有成功。我重新启动了 Play,它重新连接良好。

这周发生了两次。

我想到了自动重启。你知道一个工具吗?或任何其他想法?

编辑 我通过更新 Build.scala 中的依赖项来更新 BoneCP:

  "com.google.guava" % "guava" % "14.0-rc1",
  "org.slf4j" % "slf4j-api" % "1.7.5",
  "com.jolbox" % "bonecp" % "0.8.0-rc1",  
  "org.reflections" % "reflections" % "0.9.8"

但现在我经常收到这个错误,告诉它无法关闭连接。所以它再次达到最大连接数。

- 关闭连接 org.postgresql.util.PSQLException 时出错:无法在事务中间更改事务只读属性。在 org.postgresql.jdbc2.AbstractJdbc2Connection.setReadOnly(AbstractJdbc2Connection.java:617) ~[postgresql.postgresql-9.1-901-1.jdbc4.jar:na]

4

1 回答 1

1

此错误表示打开的连接太多。这可能是由连接池问题或应用程序中的连接泄漏引起的。要进行故障排除:

  1. 检查 pg_stat_activity 视图以查看连接来自何处。他们是你的应用程序吗?别的地方?

  2. 如果它们来自您的应用程序,请密切注意它们何时启动,您是否未能正确释放连接以便池程序可以重新使用连接?

于 2013-11-15T08:03:37.937 回答