压测

对于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参数,则会减少这种请求。