﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-loveispopular-随笔分类-J2EE</title><link>http://www.blogjava.net/loveispopular/category/36022.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 25 May 2009 02:04:48 GMT</lastBuildDate><pubDate>Mon, 25 May 2009 02:04:48 GMT</pubDate><ttl>60</ttl><item><title>(转载)tomcat连接池泄露问题</title><link>http://www.blogjava.net/loveispopular/archive/2009/05/24/277688.html</link><dc:creator>george_chen</dc:creator><author>george_chen</author><pubDate>Sun, 24 May 2009 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/loveispopular/archive/2009/05/24/277688.html</guid><wfw:comment>http://www.blogjava.net/loveispopular/comments/277688.html</wfw:comment><comments>http://www.blogjava.net/loveispopular/archive/2009/05/24/277688.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/loveispopular/comments/commentRss/277688.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/loveispopular/services/trackbacks/277688.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p>今天项目的批处理日志发现报了以下的异常：</p>
<p>org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool exhausted</p>
<p>Caused by: <br />
java.util.NoSuchElementException: Timeout waiting for idle object</p>
<p>在网上搜集答案，转载至此:</p>
<p>1 问题描述<br />
Web程序在tomcat刚开始运行时速度很快，但过一段时间后发现速度变得很慢。<br />
检查日志输出，发现异常如下:<br />
org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause: <br />
java.util.NoSuchElementException: Timeout waiting for idle object<br />
同时在SQLServer事件探查器中发现，每执行一次sql语句都要产生Audit login事件，语句执行后产生<br />
Audit logout事件。说明每一次tomcat都是重新打开新的连接。<br />
2 问题解决<br />
tomcat 的数据源定义提供了三个参数：<br />
a. 如果设为true则tomcat自动检查恢复重新利用，没有正常关闭的Connection.（默认是false）<br />
&lt;parameter&gt;<br />
&lt;name&gt;removeAbandoned&lt;/name&gt;<br />
&lt;value&gt;true&lt;/value&gt;<br />
&lt;/parameter&gt;<br />
b. 设定连接在多少秒内被认为是放弃的连接，即可进行恢复利用。<br />
&lt;parameter&gt;<br />
&lt;name&gt;removeAbandonedTimeout&lt;/name&gt;<br />
&lt;value&gt;60&lt;/value&gt;<br />
&lt;/parameter&gt;<br />
c. 输出回收的日志，可以详细打印出异常从而发现是在那里发生了泄漏<br />
&lt;parameter&gt;<br />
&lt;name&gt;logAbandoned&lt;/name&gt;<br />
&lt;value&gt;true&lt;/value&gt;<br />
&lt;/parameter&gt;</p>
</div>
<img src ="http://www.blogjava.net/loveispopular/aggbug/277688.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/loveispopular/" target="_blank">george_chen</a> 2009-05-24 15:36 <a href="http://www.blogjava.net/loveispopular/archive/2009/05/24/277688.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>