Heroku / Play / BoneCp连接问题

我在heroku上有一个使用游戏的应用程序。 它工作时间最长,但最近我开始得到这个:

Caused by: java.sql.SQLException: Timed out waiting for a free available connection. at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) ~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) ~[bonecp-0.7.1.RELEASE.jar:0.7.1.RELEASE] 

这是由

 org.postgresql.util.PSQLException: FATAL: too many connections for role "ejmatdbwywaugk" 

现在这显然是一个连接泄漏,除了我正在使用JPA.em()。 Play示例永远不会关闭像这样获得的实体管理器。 我尝试关闭它,但随后应用程序爆炸说实体经理已经关闭。

有任何想法吗?

尝试使用BoneCP 0.8.0-rc1并使用此配置:

 db.default.idleMaxAge=10 minutes db.default.idleConnectionTestPeriod=30 seconds db.default.connectionTimeout=20 second db.default.connectionTestStatement="SELECT 1" db.default.maxConnectionAge=30 minutes 

BoneCP / Heroku / Play如何处理连接存在缺陷。 我在github上修复了BoneCP:

https://github.com/wwadge/bonecp/pull/10

此外,通过向Build.scala添加以下内容,可以使用已编译的库:

 val appDependencies = Seq( "com.jolbox" % "bonecp" % "0.8.0-rc2-SNAPSHOT-20130712-14382677.jar", .... val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings( libraryDependencies += "com.jolbox" % "bonecp" % "0.8.0-rc2-SNAPSHOT-20130712-14382677.jar" from "https://dl.dropboxusercontent.com/u/36714110/libraries/bonecp-patches/bonecp-0.8.0-rc2-SNAPSHOT-20130712-14382677.jar" ,resolvers += ... 

我使用远程postgres实例遇到了同样的问题。 我将以下内容添加到我的application.conf数据库设置中:

 db.default.partitionCount=1 db.default.maxConnectionsPerPartition=5 db.default.minConnectionsPerPartition=5 

这对我有用。 我正在使用org.postgresql.Driver驱动程序。

BoneCP版本0.7.1(目前是稳定版本)的连接泄漏存在已知问题 – 错误999114 。 切换到@MaFo提到的更高版本应该修复它。 BoneCP / Postgres连接泄漏中还提到了一种解决方法

最后,我在我正在处理的项目上切换到另一个连接池Tomcat JDBC连接池 ,因为我希望它(将会)得到更好的支持,因为它是apache项目的一部分。