用apache的ab压测如果-c太大会很慢是怎么回事?

用ab压测接口,-c 100的话很快,300、500、800甚至1000就开始慢了,90%或95%的耗时都比较快,就是总有一小部分请求的耗时会偏高,导致QPS变低的很厉害,这是为什么呢。

补充下,是在linux下试的

____________________分割线

是在linux下对本机压测的,整体就nginx+phpfpm

就压一个php文件,里面就echo一句hello world。

c 100的时候QPS大概在1400-1500左右,请求都维持100ms内。
但c提升到300以上,90%的请求依然可以在80ms左右,但就是有极少数请求会在2000、3000ms以上,整个QPS均值就跌下来了,就只有五六百。

这个要看具体情况。本机测试,还是测试某个远端服务器? 服务器是云服务器还是自己机房里面的?从测试机到服务器的路径上有没有防火墙?带宽多少?服务器架构和组网是什么样的?有作负载分担吗?如果做了的话是根据什么来分担的?…

此外,你说QPS变低得很厉害,到底多低?

百度的ab测试出的QPS也不是很高:

$ ab -c 300 -n 300 http://www.baidu.com/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.baidu.com be patient
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 300 requests Server Software: BWS/1.1
Server Hostname: www.baidu.com
Server Port: 80 Document Path: /
Document Length: 99397 bytes Concurrency Level: 300
Time taken for tests: 3.470 seconds
Complete requests: 300
Failed requests: 287 Connect: 0, Receive: 0, Length: 287, Exceptions: 0
Write errors: 0
Total transferred: 30179295 bytes
HTML transferred: 29886790 bytes
Requests per second: 86.46 [#/sec] mean
Time per request: 3469.888 [ms] mean
Time per request: 11.566 [ms] mean, across all concurrent requests
Transfer rate: 8493.64 [Kbytes/sec] received Connection Times ms min mean[+/-sd] median max
Connect: 3 20 1.7 20 23
Processing: 35 2082 1070.6 1986 3426
Waiting: 4 445 373.3 265 1445
Total: 38 2102 1070.4 2005 3447 Percentage of the requests served within a certain time ms 50% 2005 66% 3229 75% 3290 80% 3302 90% 3357 95% 3393 98% 3417 99% 3429 100% 3447 longest request

-c 100 表示1次发出100个请求.
对于采用epoll等事件驱动的服务比如Nginx,能够开门把请求先放进来,谁先准备好就先处理谁,不用排队.
而没有事件驱动的服务比如prefork MPM下的Apache,则只能把请求堵在门口的backlog队列里排队,逐个处理.
这时你要增加Apache的吞吐量,你就应该把backlog队列配置得更大些默认511,以及增开工作进程.
进程数不宜开太多,否则CPU在大量进程间来回切换分配资源也会产生开销导致性能不佳.

也要你本地的并发连接能到啊,太大本地就直接报错了,或是没响应了

发表评论

电子邮件地址不会被公开。 必填项已用*标注