压测过程中的KeepAlive

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了压测过程中的KeepAlive相关的知识,希望对你有一定的参考价值。

参考技术A 使用wrk压测,待测服务多节点

通过域名访问nginx对比直连,压测时性能损耗很大的问题

1). 原因:经查询TCP状态,通过nginx压测时,目标服务器会出现大量TIME_WAIT

ss -ant | awk 'NR>1 ++s[$1] END for(k in s) print k,s[k]'

2). 为什么:TCP释放连接,服务端发送FIN至进入CLOSED状态的时间间隔

在 高并发短连接 的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于TIME_WAIT状态

所以问题定位到应该是nginx的connection可能不是keepalive

3). tcpdump流量,由nginx转发的数据header → Connection: close;由直连方式请求的数据header为空,而HTTP/1.1默认Keep-alive

tcpdump -i eth1 -nnA src host 10.1.112.47 and dst host 10.1.115.79 | grep -C 3 'mockServer'

4). 问题解决:修改nginx配置文件

keepalive_timeout  10;(如果这个为0,则会导致nginx有大量的TIME_WAIT)

upstream → keepalive 30;(具体设置的值需要根据压测时间而定,需要大于整体压测的时间)proxy_http_version 1.1; proxy_set_header Connection "";(如果这些不设置,则会导致目标服务器有大量TIME_WAIT)

over

使用Keepalive提高吞吐量

keepalive 32指的是要保持的连接数,把一部分连接保持为长连接,那么就可以减少连接创建的消耗
使用Jmeter压测工具对比keepalive前后配置,发现吞吐量可以显著增大

技术图片

推荐:伊春SEO

以上是关于压测过程中的KeepAlive的主要内容,如果未能解决你的问题,请参考以下文章

性能测试:Jmeter压测过程中的短信验证码读取

深度解析全链路压测实施过程

你真的了解性能压测中的SLA吗?

全链路压测:全链路压测的价值是什么?

记一次压测中Mysql数据库异常分析过程

存储过程制造压测数据