我在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示例永远不会关闭像这样获得的实体管理器。我尝试关闭它,但随后应用程序爆炸说实体经理已关闭。
有什么想法吗?
答案 0 :(得分:8)
尝试使用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
答案 1 :(得分:2)
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 += ...
答案 2 :(得分:0)
我使用远程postgres实例遇到了同样的问题。我将以下内容添加到我的application.conf db setup:
db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5
这对我有用。我正在使用org.postgresql.Driver驱动程序。
答案 3 :(得分:0)
BoneCP版本0.7.1(目前是稳定版本)的连接泄漏存在已知问题 - Bug 999114。切换到@MaFo提到的更高版本应该修复它。 BoneCP/Postgres connections leak
中还提到了一种解决方法最后,我切换到我正在处理的项目的另一个连接池Tomcat JDBC Connection Pool,因为我希望它(将会)得到更好的支持,因为它是apache项目的一部分。