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表示 
无限制。

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

  1. connection pool exhausted

    1.发现问题 生产环境发现有一些redis报错日志 connection pool exhausted.如果redis中没有数据 就直接回源 查DB.暂时不会有什么大问题.中文意思是连接池耗尽. 2. ...

  2. tomcat异常: Cannot get a connection, pool exhausted

    1 问题描述Web程序在tomcat刚开始运行时速度很快,但过一段时间后发现速度变得很慢. 检查日志输出,发现异常如下:org.apache.commons.dbcp.SQLNestedExcepti ...

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

    Linux 出现telnet: connect to address 127.0.0.1: Connection refused错误解决办法 没有xinetd服务: 1./etc/init.d目录中放 ...

  4. Error:The network adaptor could not establish the connection问题的解决办法

     最近在学习hibernate 5.0.4, 自然而然就需要使用数据库,由于本人工作中一直使用Oracle,于是在自己的电脑上安装了Oracle 12.1.0, 安装完成使用一直没有问题,突然有一天使 ...

  5. 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 ...

  6. Xshell5连接虚拟机出现连Could not connect to '192.168.47.128' (port 22): Connection failed,解决办法

    该日记写于2016年11月28日.在用Xshell5连接ubuntu虚拟OS时一直连接不上.出现这种情况的原因可能很多,有像百度上面说的没有关闭linux的防火墙,没有启动linux的ssh服务.但这 ...

  7. Could not connect to '192.168.80.145' (port 22): Connection failed的解决办法(远程连不上xshell)

    问题状况表现1 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置!!!. 问题状况表现2 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置. 解决办法 网上的那些解决方案,我都试过,比如. ...

  8. 启动fiddler情况下,网络连接错误[Fiddler] The connection to ** failed.解决办法

    这种错误是由于浏览器设置了代理,而代理服务器配置不正确导致 解决办法 1.关闭浏览器服务器代理,设置-高级-网络代理 2.检查网络代理设置是否正确,Fiddler中配置的端口号需要跟浏览器中配置的端口 ...

  9. git clone https://github.com/istester/ido.git ,确提示“Failed to connect to 192.168.1.22 port 8080: Connection refused” 的解决办法 。

    不知道是否有同学遇到如下的问题: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo } span.s1 { } git clone ...

随机推荐

  1. BZOJ3669 (动态树)

    Problem 魔法森林 (NOI2014) 题目大意 给n个点,m条边的无向图,每条边有两个权值a,b. 求一条从1-->n的路径,使得这条路径上max(a)+max(b)最小.输出最小值即可 ...

  2. JavaScript面向对象编程学习笔记

    1  Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...

  3. ios网络知识

    http://www.cocoachina.com/bbs/read.php?tid-31300.html  启蒙内容 http://blog.csdn.net/nono_love_lilith/ar ...

  4. 用ajax提交form表单及乱码问题

    要求 1. form里是习题和选择的答案包含内容较多,直接用ajax获取页面元素较多,麻烦. 2. 也不能直接用form提交,form提交后会跳转页面,如果出错想在本页面获取错误信息(ajax提交)且 ...

  5. thinkphp 介绍

    一.ThinkPHP的介绍             MVC  M - Model 模型                工作:负责数据的操作  V - View  视图(模板)        工作:负责 ...

  6. 华为U8810的用户如何获取ROOT权限详细教程

    由于在论坛里看到有人在找这个手机的详细的root教程,所以刷机啦小编在这里整理了一下方便新手来操作,其实这个手机root起来还是蛮简单的,只需要一个root软件就可以了,相当于一键root了,在这里整 ...

  7. 关于MySQL数据导出导入

    工具 mysqlmysqldump 应用举例 导出 导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --d ...

  8. git和SVN交互(待完善)

    右键 git bash here 然后从SVN同步代码,git status命令,用来确认版本库状态 右键 --> TortoiseGit -->  show log 打开日志  查看gi ...

  9. Convert.ToInt32()与int.Parse()的区别

    Convert.ToInt32()与int.Parse()的区别 (1)这两个方法的最大不同是它们对null值的处理方法:    Convert.ToInt32(null)会返回0而不会产生任何异常, ...

  10. Android——播放器和图片轮播

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...