我在heroku上有一个使用play的应用程序。它在很长一段时间内都工作得很好,但最近我开始得到这样的结果:
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示例永远不会关闭像这样获得的实体管理器。我试着关闭它,但应用程序突然显示实体管理器已关闭。
有什么想法吗?
发布于 2013-03-19 13:09:40
尝试使用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
发布于 2013-07-15 00:20:27
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 += ...
发布于 2013-03-21 09:18:41
Bug 999114是BoneCP 0.7.1版本(当前是稳定版本)的连接泄漏的已知问题。切换到@MaFo提到的更高版本应该可以修复它。在BoneCP/Postgres connections leak中还提到了一种解决方法
最后,我切换到了另一个我正在从事的项目的连接池Tomcat JDBC Connection Pool,因为我希望它(将会)得到更好的支持,因为它是apache项目的一部分。
https://stackoverflow.com/questions/15480506
复制相似问题