gpt4 book ai didi

sql-server - 列出未断开连接或未正确断开连接的数据库连接

转载 作者:行者123 更新时间:2023-11-28 23:22:45 24 4
gpt4 key购买 nike

我正在使用带有 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,只发现了一些我已经查阅过(甚至投票赞成)的条目:

但问题仍然存在或在一段时间后再次出现,所以我想找到一种方法来追踪我忘记关闭连接的位置。在我的 Tomcat 上,还有一个 PSI 探测器在运行,告诉我请求中出现了一些错误,有时响应时间已达到最大值。我在那里看到了一个很好的请求列表,但不知道哪些被放弃了。

SQL-Server Management Studio 中的 ActivityMonitor 没有太大帮助,它列出了很多我知道它们已关闭(或者应该关闭)的进程。

分析此类问题的最佳方法是什么?

最佳答案

您真正想要做的是启用“已放弃的连接”跟踪和报告。

您没有说明您使用的是哪个 Tomcat 的 JDBC 数据源池(有两个),但它们的配置类似:

  1. commons-dbcp2基于:logAbandoned=trueremoveAbandonedOnBorrow=true
  2. tomcat-jdbc基于:logAbandoned=trueremoveAbandoned=true

我总是建议每个人在开发环境中以 1 的最大池大小运行。这将帮助您非常快速识别池泄漏,并捕获您可能在代码中植入的任何潜在死锁。

关于sql-server - 列出未断开连接或未正确断开连接的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com