tomcat:Cannot get a connection, pool exhausted

tomcat 连接池泄露的问题

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

 

转载:

1 问题描述
Web程序在tomcat刚开始运行时速度很快,但过一段时间后发现速度变得很慢。
检查日志输出,发现异常如下:
org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause: 
java.util.NoSuchElementException: Timeout waiting for idle object
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>

d.验证查询

<parameter>
<name>validationQuery</name>
<!--<value>select 1 from dual</value>  oracle db -->

<value>select 1</value> <!--mysql db-->
</parameter>

原文地址:http://blog.csdn.net/ztf200/article/details/4008897

当你遇到 "Cannot get a connection; pool exhausted" 的错误,通常意味着Python的MySQL连接池已经耗尽了所有的可用连接。这可能是因为并发请求过多,超过了数据库连接池的最大容量。以下是几种解决这个问题的方法: 1. **调整数据库连接池大小**:检查你的 `pymysql` 配置,特别是 `mysql_pool_size` 参数,确保它足够处理预期的并发流量。如果可能,增加最大连接数。 ```python from sqlalchemy import create_engine engine = create_engine('mysql+pool://user:password@host/dbname', pool_size=50) ``` 2. **设置合理的超时时间**:配置连接自动回收机制,例如设置 `pool_recycle` 参数来限制无活动连接的存活时间。 ```python engine = create_engine('mysql+pool://user:password@host/dbname', pool_recycle=600) # 10分钟内无操作则关闭连接 ``` 3. **按需获取连接**:避免长时间保持大量未使用的连接。每次需要数据库操作时,尽可能快地获取并释放连接。 4. **监控和限流**:通过日志分析或第三方工具监控连接池的状态,并在必要时限制并发请求的数量。 5. **处理异常并回滚**:捕获 `PoolError` 或 `OperationalError(2003)` 等错误,并在适当的情况下释放已有的连接,然后尝试再次获取。 ```python try: with engine.connect() as conn: # ...数据库操作... except (PoolError, OperationalError): # 处理错误并释放连接,再试一次 engine.dispose() with engine.connect() as conn: # ...数据库操作... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值