常见性能问题:数据库连接池不释放

在性能测试中遇到数据库连接池未释放的问题,通过分析provider服务器日志、检查配置文件、监控数据库连接数,发现并发请求导致连接池耗尽。尽管调整连接池大小,但问题依然存在,确认为连接池释放故障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近的性能测试中,遇到一个数据库连接池不释放的问题,下面描述下定位到这个问题的流程。

我们用的是dubbo框架

1.首先,压测过程中,请求失败了,所以,赶紧去看provider服务器日志(tail -f -n500 xxx.log),抛出的错误是:

2.原来是没获取到数据库的连接池,马上去看了下配置文件(less db.properties,最大连接数配置的100,此时并发的150),首先想到的是连接数配置的小了,于是改为150,当然,这个需要比数据库自身允许的连接数小,通过下图中的命令查询,select value from v$parameter where name ='processes'; 显示数据库最大连接数是1500

重启provider服务,初始化数据库中的数据

注意:连接数并不是一定要比并发数大,由于漏斗原理,哪怕并发150,实际到数据库的并发可能只有几十

3.重新压测,过了一会儿,还是报相同的错,此时我并发的150,于是,怀疑要么是有其他人也在用我的数据库服务器,要么就是数据库连接池没释放

4.马上连接到consumer服务器,首先看有没非我压力机的ip

netstat -an | grep 192.168.3.141:8080 | awk '{print $5}' | awk -F ':' '{print $4}' | sort | uniq -c | sort -nr

结果只有我压力机的ip,排除其它人在用我的服务器,所以很可能就是数据库连接池没有释放了

5.停止压测,过了一段时间,查数据库的连接数

显示数据库当前的连接数:select count(*) from v$process; 

结果是150+,连接池被占满了

6.再次修改连接池,改为200,重新压测,依旧报相同的错,查数据库的连接数,连接池也被占满了

7.过了一段时间再查,连接池依旧是被占满的状态,至此,可以断定,是数据库连接池未释放。

 

这个性能问题相对简单,因为错误日志已经为我们指明了大致的方向。 

转载于:https://www.cnblogs.com/uncleyong/p/10799325.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值