压测
对于http服务,压测是一个很常见的需求。而apache自带的ab命令,是压测不错的工具。
以下是压测一个springboot的一个简单的helloworld项目。过程如下:
参数说明
ab参数:
-n 请求的总数,根据并发能力,动态调整
-c 并发的进程数
-k 保持连接,设置该参数时,可以避免反复建立tcp连接过程
压测示例
设置不同的并法请求。
for i in `seq 100 100 2000`;do
echo $i;
ab -n 200000 -c $i -k http://10.172.41.206:8080/hello 2>&1|grep 'Requests per second:' ;
done
想象描述:在压测的过程中,发现ab在请求一段时间后,命令行会卡住一段时间,此时,用浏览器访问一下服务,服务是正常的。按以下排查
服务端跟压测端同时测试下面的输出
netstat -tnp |grep -c TIME_WAIT
服务端 极限时,5000
查找配置文件
grep 5000 -rn /etc/
发现
/etc/sysctl.conf:20:net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_tw_buckets
根据上面的关键字发现文章
https://blog.csdn.net/qq_17321007/article/details/117523929
tcp_max_tw_buckets 限制TIME_WAIT的最大值,可以更改
由于TIME_WAIT的存在,导致客户端、服务端都受到影响。这是因为频繁的建立连接。比如,使用for + curl来请求,都会导致大量的TIME_WAIT、,需要过一段时间才会消失。使用-k参数,则会减少这种请求。