Ab负载测试


193

有人可以指导我使用apache Bench工具ab)对网站进行负载测试的过程吗?

我想知道以下内容:

该网站每分钟可以处理多少人?

请引导我完成应该解决的命令。

我尝试了所有教程,但它们令人困惑。

Answers:


312

apache基准测试工具非常基础,虽然可以为您提供一些性能方面的扎实思路,但是如果您打算让站点承受严重的生产压力,则仅依靠它是一个坏主意。

话虽如此,这是最常见和最简单的参数:

-c:(“并发性”)。指示将同时访问该站点的客户(人员/用户)数量。虽然ab运行时,会出现-c客户访问该网站。这实际上决定了您的网站在基准测试期间所承受的压力。

-n:指示将要发出多少个请求。这只是决定基准的长度。一个高-n价值-c的服务器可以支持的价值是一个很好的主意,以确保事情不会在持续的压力下破裂:将压力承受5秒钟与承受压力5小时并不相同。

-k:这是“ KeepAlive”功能浏览器的本质。您不需要为其传递-k“布尔值”值(意味着:它表示您希望测试使用HTTP中的Keep Alive标头并维持连接),您无需传递该值。由于浏览器会执行此操作,因此您可能希望模拟浏览器对网站的压力和流量,因此建议您为此进行基准测试。

最后的论点仅仅是主持人。默认情况下,如果未指定,它将按http://协议。

ab -k -c 350 -n 20000 example.com/

通过发出上述命令,您将同时具有350个并发连接来访问http://example.com/,直到满足2万个请求为止。将使用keep alive标头完成此操作。

该过程完成2万个请求后,您将收到有关统计信息的反馈。这将告诉您使用上述参数时,网站在您施加的压力下的表现如何。

为了找出该站点可以同时处理多少人,只需查看响应时间(平均,最小和最大响应时间,失败的请求等)是否是您的站点可以接受的数字(不同的站点可能需要不同的速度)。您可以使用不同的-c值来运行该工具,直到碰到“说,如果我增加它,它就会收到失败的请求并中断”。

根据您的网站,您期望每分钟平均请求数。差异如此之大,您将无法使用ab进行模拟。但是,请这样考虑:如果您的平均用户每分钟将收到5个请求,而您发现有效的平均响应时间是2秒,则意味着每1分钟有1个用户将响应10秒,这仅意味着1/6的时间会到达该网站。这也意味着,如果同时有6个用户用ab击中该站点,则即使您的并发级别(-c)仅是6,您也可能有36个用户处于模拟状态。

这取决于您希望用户使用该网站的行为,但是您可以从“我希望我的用户每分钟达到X个请求,并且我认为平均响应时间为2秒有效”中得到它。然后,只需修改-c级别,直到达到平均响应时间2秒(但请确保最大响应时间和stddev仍然有效),然后查看-c的大小即可。

我希望我解释清楚了:)祝你好运


5
明确的答案!您能否解释一下为什么会得到这个原因的更多信息,“这还意味着,如果同时有6个用户使用ab击中该站点,那么即使并发级别(-c)仅是6”
kbariotis 2014年

3
提醒一下,-l如果页面包含动态内容,则可能要添加该选项,这样就不会收到一堆失败的请求,因为请求之间的内容长度是不同的。
JCM 2015年

73

请引导我完成应该解决的命令。

您可以做的最简单的测试是一次执行1000个请求,一次执行10个请求(大约模拟10个并发用户,每个用户在测试过程中获得100页)。

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 是发出的请求数。

-c 10 告诉AB一次执行10个请求,而不是一次执行1个请求,以更好地模拟并发访问者(相对于顺序访问者)。

-k发送KeepAlive标头,该标头要求Web服务器在完成每个请求后不要关闭连接,而是继续重用它。

我还要发送额外的标头,Accept-Encoding: gzip, deflate因为mod_deflate几乎总是用于将text / html输出压缩25%-75%-由于对Web服务器的整体性能有影响,因此不应忽略其效果(即,可以在相同的时间内传输2倍的数据,等等)。

结果:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

对于最简单的解释,请忽略此行中的所有内容:

Requests per second:    704.23 [#/sec] (mean)

将其乘以60,就可以得到每分钟的请求数。

为了获得真实的结果,您需要测试Wordpress而不是测试某些静态HTML或index.php文件,因为您需要了解所有功能如何一起运行:包括复杂的PHP代码和多个MySQL查询...

例如,这是在同一系统和WAMP环境(我使用的是WampDeveloper,但还有Xampp,WampServer等)上测试全新安装的Wordpress的结果...

Requests per second:    18.68 [#/sec] (mean)

现在慢了37倍!

负载测试后,您可以采取许多措施来提高整体性能(每秒请求数),并使Web服务器在更大负载下更加稳定(例如,增加Apache 的使用-n-c使其崩溃),您可以在这里了解到:

使用AB对Apache进行负载测试(Apache Bench)


9

在Windows上设置Apache Bench(AB)的步骤(IMO-推荐)。

步骤1-安装Xampp。
第2步-打开CMD。
步骤3- cd C:\xampp\apache\bin从CMD 转到apache Bench目标()
步骤4-粘贴命令(ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/
步骤5-等待它。完成了


它无法正常工作...我收到此错误:基准化localhost(请耐心等待)... apr_socket_recv:连接被拒绝(111)
Vijaysinh Parmar

将本地主机替换为127.0.0.1
akshaynagpal,

3

我也很好奇我是否可以使用apache abs或构建/销毁php measure脚本或php扩展来测量脚本的速度。

对于我而言,最后两个失败了:它们是近似值。之后我想尝试“ ab”和“ abs”。

命令“ ab -k -c 350 -n 20000 example.com/”很漂亮,因为它更简单!

但是有人在任何apache服务器上都认为“ localhost”吗,例如www.apachefriends.org?

您应该在根目录中创建一个文件夹,例如“ bench”,其中有2个文件:测试“ bench.php”并引用“ void.php”。

然后:进行基准测试!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

在桌面上,您应该使用.bat文件(在Windows中),如下所示:

板凳蝙蝠

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

现在,如果您密切注意...

无效脚本不会产生零结果!所以结论是:从第二个结果开始,第一个结果应该减少!!!

我在这里:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73我期望的结果!


2

仅使用ab负载测试API是不够的。但是,我认为这是一个很好的工具,可让您基本了解网站的性能。

如果要在后台同时使用ab命令来测试具有不同数据的多个API端点,则需要同时使用“ nohup”命令。即使关闭终端,它也会运行任何命令。

我写了一个简单的脚本来自动化整个过程,随时可以使用它:http : //blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.