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

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

我们用的是dubbo框架

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

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

常见性能问题:数据库连接池不释放_第1张图片

重启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

你可能感兴趣的:(常见性能问题:数据库连接池不释放)