性能测试:连接池不释放
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.过了一段时间再查,连接池依旧是被占满的状态,至此,可以断定,是数据库连接池未释放。
这个性能问题相对简单,因为错误日志已经为我们指明了大致的方向。
以上是关于性能测试:连接池不释放的主要内容,如果未能解决你的问题,请参考以下文章