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 2.1 - 找不到隐式 ExecutionContext
我需要在 Play Framework 中管理数据库连接池,还是 Play 为我做这件事?
Play Framework 1.3中如何通过application.conf和c3p0.properties配置连接池?