Cannot get a connection, pool exhausted解决办法

http://blog.163.com/it_message/blog/static/8892051200908102032653/

连接池(Tomcat+oracle),运行一段时间后就会出现 Cannot get a connection, pool exhausted这样的异常。其实这个问题很简单就是数据库connection对象用尽了。

解决的办法有3个

1重启服务器

2在content.xml中,将maxActive设置为零,或者调高它的值

3在你的程序中正确关闭connections 这里有一点要注意要把关闭的语句写在finally中,如果你写在try{}中出现异常的话是无法正确关闭的。

要象这样

} catch (SQLException e) {

/** Exception handling **/

} finally {

try {

if (stmt != null)

stmt.close();

if (dbConnection != null)

dbConnection.close();

} catch (SQLException e) {

/** Exception handling **/

}

}

当然这3个方法里前两个并不能从根本上解决你的问题,所以还是要好好研究你的程序,一定要将用完的connection放回到池中。

1 问题描述

Web程序在tomcat刚开始运行时速度很快,但过一段时间后发现速度变得很慢。

检查日志输出,发现异常如下:

org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause:

java.util.NoSuchElementException: Timeout waiting for idle object

同时在SQLServer事件探查器中发现,每执行一次sql语句都要产生Audit login事件,语句执行后产生

Audit logout事件。说明每一次tomcat都是重新打开新的连接。

2 问题解决

tomcat 的数据源定义提供了三个参数:

a. 如果设为true则tomcat自动检查恢复重新利用,没有正常关闭的Connection.(默认是false)

<parameter>

<name>removeAbandoned</name>

<value>true</value>

</parameter>

b. 设定连接在多少秒内被认为是放弃的连接,即可进行恢复利用。

<parameter>

<name>removeAbandonedTimeout</name>

<value>60</value>

</parameter>

c. 输出回收的日志,可以详细打印出异常从而发现是在那里发生了泄漏

<parameter>

<name>logAbandoned</name>

<value>true</value>

</parameter>

---------------------------------------------------------------------------------------------------------------------------------------

maxActive、maxIdle 建议设置 maxActive="300" maxIdle="50"

maxActive 设置在300-1000之间

maxIdle   设置在 20-100 之间

还有就是在程序的 finally 里面要关闭 Connection

例如: DbHelper.closedAll(rs, ps, conn);

maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连 
接将被标记为不可用,然后被释放。设为0表示无限制。 
MaxActive,连接池的最大数据库连接数。设为0表示无限制。 
maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示 
无限制。

时间: 2024-10-08 09:36:47

Cannot get a connection, pool exhausted解决办法的相关文章

ssh连接报错:Connection refused的解决办法

ssh: connect to host localhost port 22: Connection refused的解决办法 出现此报错,主要是有两个问题,第一就是没有安装ssh相关服务软件:第二是没有启动sshd服务. 首先查看一下是否有安装提供sshd服务的软件如果没有,则需要安装 如果已经安装了提供sshd服务的软件,那么就是没有启动sshd服务.此时先查看一下sshd服务的状态如果是dead的状态,说明没有启动sshd服务,那么就要启动sshd服务. 这样就可以解决以上报错问题了. 原

Linux 出现telnet: 127.0.0.1: Connection refused错误解决办法

Linux 出现telnet: connect to address 127.0.0.1: Connection refused错误解决办法 没有xinetd服务: 1./etc/init.d目录中放置了系统中各个daemon服务的脚本,xinetd是其中之一. 2.xinetd是一种特殊的daemon服务(super daemon),它本身管理了一系列的daemon服务,这些服务只有在用户调用时才由xinetd启动,它们启动速度稍慢于独立的daemon服务,这些服务在/etc/xinetd.c

Spring Boot连接MySQL长时间不连接后报错`com.mysql.cj.core.exceptions.ConnectionIsClosedException: No operations allowed after connection closed.`的解决办法

报错:com.mysql.cj.core.exceptions.ConnectionIsClosedException: No operations allowed after connection closed. 添加 &autoReconnect=true 无济于事,此选项好像仅对 MySQL 5之前的版本有效. 原因 Mysql服务器默认的"wait_timeout"是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection.这

java.net.SocketException:No buffer space avaliable(maximum connection reached?):JVM_Bind 解决办法

No buffer space available 2009-06-15 14:03 java.net.SocketException: No buffer space available (maximum connections reached?): JVM_Bind 2009-04-14 09:10 公司服务器最近几天一直报错误,大概运行一天就报如下异常. java.net.SocketException: No buffer space available (maximum connect

Oracle 错误:ORA-06413: Connection not open 解决办法

http://blog.csdn.net/neso520/article/details/6037411 ———————————————————————————————————————————————————————————————————————— ORA-06413: Connection not open 前两天在一台机器上装了一个程序的2个不同版本.该程序通过OLE DB连接到oracle数据库.结果先装的低版本连接oracle正常,后装的高版本死活连不上,一点连接按钮就报错:ORA-0

php连接docker启动的mysql容器报错:(HY000/2002): Connection refused的解决办法

vim libraries/config.default.php 查找到localhost/127.0.0.1字符[一般来说默认都是localhost] :/localhost 替换成容器名,例如我定义的名称是mysql 原始:$cfg['Servers'][$i]['host'] = 'localhost'; 修改:$cfg['Servers'][$i]['host'] = 'mysql'; 原文地址:https://www.cnblogs.com/todarcy/p/11075724.htm

【Genymotion】add a new virtual device 失败,解决办法

Genymotion 增加新虚拟设备时,提示:Unable to create virtual device: Connection timeout occurred 解决办法: 打开 C:\Users\用户名\AppData\Local\Genymobile目录 打开genymotion.log文件,在里面最下面几行,找到如下日志 2月 8 17:04:14 [Genymotion] [Debug] Starting new download2月 8 17:04:14 [Genymotion]

MySQL 警告WARN: Establishing SSL connection without server&#39;s identity verification is not recommended.解决办法

Success loading Mysql Driver!Mon Apr 04 15:43:00 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by d

DATABASE CONNECTION ERROR (1): THE MYSQL ADAPTER &#39;MYSQLI&#39; IS NOT AVAILABLE.解决办法

网站迁移之后遇到:Database connection error (1): The MySQL adapter 'mysqli' is not available.这个问题,我一开始以为是我配置的参数错了呢!然后回去检查,检查好几遍我的数据库账号和密码都没错,但是为什么就是连接不上数据库呢?? 网上有人说是"可能有你安装wamp或者xamp之后,sqlserver的服务没有启动,你可以到系统服务菜单里看看这个是否自动启动."但是我问过空间商,他们说默认都是开启的,然后他们也检查了数