性能测试:连接池不释放

Posted uncleyong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能测试:连接池不释放相关的知识,希望对你有一定的参考价值。

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

我们用的是dubbo框架

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

技术图片

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

技术图片

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

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

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

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

netstat -an | grep 72.32.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.过了一段时间再查,连接池依旧是被占满的状态,至此,可以断定,是数据库连接池未释放。

 

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

以上是关于性能测试:连接池不释放的主要内容,如果未能解决你的问题,请参考以下文章

FunTester测试框架Redis性能测试实践#yyds干货盘点#

如何查看连接池的使用情况

性能测试平台建设

全面释放 机械革命X3-S性能测试解读

[性能测试]性能测试建议

解决tomcat数据库连接池不释放连接数问题