Play framework 2.1:连接数据库有时会崩溃。如何确保它在产品中?

Posted

技术标签:

【中文标题】Play framework 2.1:连接数据库有时会崩溃。如何确保它在产品中?【英文标题】:Play framework 2.1 : connection db crashes sometimes. How to ensure it in prod? 【发布时间】:2013-09-12 12:23:00 【问题描述】:

昨晚 Play 突然无法再连接到数据库(同一 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 - 尝试获取连接时出错。 5000ms 后重试

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

它每 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]

【问题讨论】:

又发生了,所以我补充了细节。 更新boneCP后,我得到一个不同的错误:查看我的编辑 首先检查应用程序中的任何连接泄漏。也尝试设置 setCloseConnectionWatch 的值。设置此属性会对性能产生负面影响。在开发环境中彻底测试并删除此属性,然后再将其升级到生产环境jolbox.com/bonecp/downloads/site/apidocs/index.html 请通过以下链接。似乎是同一个问题***.com/questions/15397840/… 【参考方案1】:

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

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

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

【讨论】:

谢谢。我将 Play Framework 与 Ebean 一起使用:我不打开或关闭连接。由于我没有时间调试 Play/BoneCP,我将对其进行升级,看看它是否已在最新版本中修复。

以上是关于Play framework 2.1:连接数据库有时会崩溃。如何确保它在产品中?的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework:数据库连接池关闭

Play Framework 2.1 - 找不到隐式 ExecutionContext

我需要在 Play Framework 中管理数据库连接池,还是 Play 为我做这件事?

Play Framework:“连接太多”数据库错误

Play Framework 无法连接到 WS

Play Framework 1.3中如何通过application.conf和c3p0.properties配置连接池?