gpt4 book ai didi

java - 试图识别 tomcat 中废弃连接的来源

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:36 25 4
gpt4 key购买 nike

我在 tomcat(版本 7)中使用 dbcp 连接池,但我的代码中某处存在连接泄漏。短时间后,新连接请求返回以下异常:

“无法获取连接,池错误等待空闲对象超时”

我回顾了我的代码,对我来说,所有连接似乎都已正确关闭(不是每个人都这么说......)。

为了对此进行调试,我在 context.xml 中添加了以下属性:

logAbandoned="true" removeAbandoned="true" removeAbandonedTimeout="300"

所以资源标签现在看起来像这样:

 <Resource name="jdbc/findata" auth="Container" type="javax.sql.DataSource"
maxActive="20" maxIdle="5" maxWait="10000"
username="root" password="xxxxxx" driverClassName="com.mysql.jdbc.Driver"
logAbandoned="true" removeAbandoned="true" removeAbandonedTimeout="300"
url="jdbc:mysql://localhost:3306/findata"/>

然后我重新启动 tomcat 并开始访问网页,直到出现错误消息(在浏览器窗口中)。但是我还没有弄清楚“logAbandoned”属性在哪里写入它的信息。我在看

/usr/share/apache-tomcat-7.0.11/logs

但是里面唯一最近修改的日志文件是

localhost_access_log.2011-04-18.txt

非常感谢任何帮助。

最佳答案

根据 this site您必须从 context.xml 中为您的资源定义提供一个工厂。资源的配置将由这个工厂实例完成,因此所有“附加”参数都以这种方式设置。更具体地说,您的 context.xml(或 server.xml - 取决于您定义资源的位置)中会有这样的内容:

<Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1/db"
username="hibernate" password="hibernate" maxActive="20" maxIdle="10"
maxWait="1000" removeAbandoned="true" removeAbandonedTimeout="20"
logAbandoned="true" />

注意 factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 这对我们的目的来说是必不可少的。没有它,removeAbandoned="true" 没有效果。

被放弃的每个连接的堆栈存储在 catalina.log ($tomcat_dir/logs) 中。从那里它会为调试连接提供非常准确的详细信息。

除了“废弃”参数之外,您还可以配置很多与 tomcat jdbc 池性能、超时和其他色调和 bolt 相关的东西。当然,这需要一些深厚的专业知识。 (您可以在我最初提供的网站中找到详细信息)

关于java - 试图识别 tomcat 中废弃连接的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703955/

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