我已完成在Play框架中构建网站。该网站部署在服务器上。但是,我正面临一些像这样的随机发生的问题..
This exception has been logged with id 6ilmmm0fk.
我之前也遇到了同样的错误。所以,我重新启动了完整的应用程序,它就消失了。但是,我再次面临同样的错误。
为什么会出现此错误?
我得到了这样的堆栈跟踪
play.api.Application$$anon$1: Execution exception[[SQLException: Timed out waiting for a free available connection.]]
at play.api.Application$class.handleError(Application.scala:293) ~[com.typesafe.play.play_2.10-2.2.2.jar:2.2.2]
at play.api.DefaultApplication.handleError(Application.scala:399) [com.typesafe.play.play_2.10-2.2.2.jar:2.2.2]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [com.typesafe.play.play_2.10-2.2.2.jar:2.2.2]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [com.typesafe.play.play_2.10-2.2.2.jar:2.2.2] at scala.Option.map(Option.scala:145) [org.scala-lang.scala-library-2.10.3.jar:na]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [com.typesafe.play.play_2.10-2.2.2.jar:2.2.2]
Caused by: java.sql.SQLException: Timed out waiting for a free available connection.
at com.jolbox.bonecp.DefaultConnectionStrategy.getConnectionInternal(DefaultConnectionStrategy.java:88) ~[com.jolbox.bonecp-0.8.0.RELEASE.jar:na]
at com.jolbox.bonecp.AbstractConnectionStrategy.getConnection(AbstractConnectionStrategy.java:90) ~[com.jolbox.bonecp-0.8.0.RELEASE.jar:na]
at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:553) ~[com.jolbox.bonecp-0.8.0.RELEASE.jar:na]
at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:131) ~[com.jolbox.bonecp-0.8.0.RELEASE.jar:na]
at play.api.db.DBApi$class.getConnection(DB.scala:67) ~[com.typesafe.play.play-jdbc_2.10-2.2.2.jar:2.2.2]
at play.api.db.BoneCPApi.getConnection(DB.scala:276) ~[com.typesafe.play.play-jdbc_2.10-2.2.2.jar:2.2.2][^[[31merror^[[0m] play - Cannot invoke the action, eventually got an error: java.sql.SQLException: Timed out waiting for a free available connection.
[^[[31merror^[[0m] application
堆栈跟踪显示Timed Out for SQL query
可能是我在数据库中有太多打开的连接。
更新
我发现数据库正在泄漏连接。浏览代码我检查并更新了以下事务
try{
Ebean.beginTransaction()
// All code goes here
//
Ebean.commitTransaction()
}catch{
e.printStackTrace();
}finally{
Ebean.endTransaction();
}
是否有更好的方法来识别开放连接和循环漏洞。因为我仍然面临着上述问题。
更新
我已经转移到HikariCP JDBC而不是Play框架BoneCP。 BoneCP处理连接关闭的方式存在问题。
答案 0 :(得分:1)
您可能希望将jdbc池配置为在连接上具有更长的超时。在application.conf
你可能有:
db.default.connectionTimeout=30 seconds
有关详细信息:http://www.playframework.com/documentation/2.2.x/SettingsJDBC
答案 1 :(得分:0)
我找不到上述问题的确切解决方案,但需要解决。 我为我的数据库连接切换到HikariCp,这确实解决了问题(它现在工作了5个月没有,单个异常或线程泄漏)。如果他们面临与BoneCP的上述问题,我建议改用HikariCP。