我使用带有SQL Server 2008的动态Java Web应用程序(Tomcat 8.0.15,Java EE 7 Web)以及获取警告/异常之后
WARNING [Tomcat JDBC Pool Cleaner[510210701:1481713957404]] org.apache.tomcat.jdbc.pool.ConnectionPool.suspect Connection has been marked suspect, possibly abandoned PooledConnection[net.sourceforge.jtds.jdbc.JtdsConnection@510fc080][67975 ms.]:java.lang.Exception
我经常想知道在我的源代码的深处,我忘了将JDBC或Hibernate连接断开连接到数据库。我想以某种方式列出它们。
常规
static
{
try {
Context context = new InitialContext ();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/sqlserv");
} catch (NamingException ex) {
Logger.getLogger(Basisverbindung.class.getName()).log(Level.SEVERE, null, ex);
}
}
完成这项工作,在我的hibernate.cfg.xml中它是一样的:
<property name="hibernate.connection.datasource">java:comp/env/jdbc/sqlserv</property>
我浏览了Stackoverflow,发现只有一些我已经咨询过的条目(甚至是upvoted):
但问题仍然存在或者在一段时间后再次出现,所以我想找到一种方法来追踪我忘记关闭连接的地方。在我的Tomcat上还有一个PSI Probe运行告诉我在请求中出现了一些错误,有时会最大化响应时间。 我在那里看到一个很好的请求清单,但不知道哪些请求被放弃了。
SQL-Server Management Studio中的ActivityMonitor没有太多帮助,它列出了我知道它们已关闭(或者应该是)的很多进程。
分析此类问题的最佳方法是什么?
答案 0 :(得分:0)
你真正想要做的是启用&#34;放弃连接&#34;跟踪和报告。
您没有说明您使用的Tomcat的JDBC数据源池(有两个),但它们的配置相似:
logAbandoned=true
,removeAbandonedOnBorrow=true
logAbandoned=true
,removeAbandoned=true
我总是建议每个人在开发环境中以最大池大小1
运行。这将有助于您快速识别池非常,并捕获您在代码中可能存在的任何潜在死锁。