为了摸底项目的性能,需要进行性能测试。经过一番调研之后,决定使用基于腾讯云TKE的分布式jmeter进行压测,好处是有jmeter-suite可用,搭建环境方便;容器化部署可以方便的增加pod来提升压力。
但是在实际施压的时候,发现请求量上不去,达不到压测效果。经定位发现,容器pod上存在大量TIME_WAIT,而实际在传输数据的连接远小于设置的并发线程数:
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
这是TCP连接释放的4次挥手的过程:
这个过程可以得到一下几个信息:
比如并行的线程数上万,由于一般是施压方主动断开连接,因此会积累大量的TIME_WAIT。建议解决方案:
如第二节中所述,TIME_WAIT状态的连接,需要2MSL时间后才能回收端口用于创建新的连接,但是实际Linux内核配置支持快速回收TIME_WAIT状态的连接,配置可查看:
cat /etc/sysctl.conf
使用百度来实验压测,实测相同的线程下,压出来的QPS大幅提升。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。