我的 grails 应用程序在 Jboss 6.0 上运行。
在加载时,我们注意到一些连接挂起并留在数据库中的事件 session 中。
连接管理完全由 grails 负责,我们不会打开/关闭任何连接。确保如果丢失任何连接,则从代码中关闭。
我们在数据源中添加了 track-statement ,但我们在日志文件中没有看到任何问题。
我们也尝试了查询超时。它不起作用,因为 DB session 处于事件状态
使用大小为 300 的 jboss 连接池
Grails 2.3.5 版
hibernate 版本: hibernate :3.6.10.7
应用服务器:jboss 6
数据库:Oracle 10g
所以我的问题是
1)如何知道它为什么持有?
2)有没有办法为连接配置连接超时。
最佳答案
根据您正在运行的配置,您可能有一个开箱即用的 JDBC 连接池。池的工作是保持一定数量的连接打开并准备好使用。建立一个新的连接稍微昂贵(身份验证、加密握手等),所以如果不是所有连接都关闭,你可能不应该 panic 。但是,如果打开一个高数字或不断增加的数字,您应该警惕。我认为 50 是典型的默认值。
通常,等待更多信息 - 是的,您可以配置很多有关连接池数据源的信息。包括一次打开多少个连接,maxIdle(在空闲时应该保持多少个连接)maxConnections,池管理器应该审核连接并清理它们的时间范围,或者如果它们超过maxIdle则关闭任何空闲连接等...
通常,当应用程序完成特定连接时,通常是在单个 HTTP 请求结束时,它会将连接返回到池,池对其进行一些清理,重置它,但保持它打开并准备好下一个请求。
查看 JDBC 2.0 Connection Pool Documentation :
并查看 Oracle JDBC Developer's Guide 10g
关于hibernate - Jboss 7没有释放连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910363/