AB负载测试

242

请有人帮助我通过Apache Bench 工具 (ab)来加载测试我的网站,你可以提供以下的信息:

网站每分钟可以处理多少访问量?

请向我展示应该运行的命令以找出答案。

我已经尝试了所有的教程,但它们都很难理解。

7个回答

380
"The Apache基准测试工具非常基础,虽然它可以给你一些性能方面的实际想法,但是如果你计划让你的网站在生产中承受严重压力,仅依赖它是一个坏主意。 话虽如此,以下是最常见和最简单的参数: -c:(“并发”)。表示同时有多少个客户端(人/用户)将访问该站点。在运行ab时,将有-c个客户端访问该站点。这实际上决定了基准测试期间您的网站所承受的压力量。 -n:表示将进行多少个请求。这只是决定基准测试的长度。使用服务器支持的-c值的高-n值是个好主意,以确保在持续的压力下不会出现问题:支持5秒和5小时的压力是不同的。"

-k:这个功能是浏览器天然具备的“KeepAlive”。你不需要为-k传递一个值,因为它是“布尔型”(意味着它表明您希望您的测试使用HTTP中的Keep Alive头并保持连接)。由于浏览器会执行此操作,并且您可能希望模拟您的网站将从浏览器那里获得的压力和流量,因此建议您使用此选项进行基准测试。

最后一个参数就是主机名。如果您没有指定它,默认情况下它会命中http://协议。

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

通过上述命令,您将使用保持连接头,以350个同时连接的方式向http://example.com/发送请求,直到达到2万个请求。
在进程完成20,000个请求后,您将收到有关统计信息的反馈。这将告诉您在使用上述参数时,该站点在承受压力方面表现如何。
要了解网站可以同时处理多少人,请查看响应时间(即平均响应时间、最小和最大响应时间、失败的请求等)是否是您的网站可以接受的数字(不同的网站可能需要不同的速度)。 您可以使用不同的-c值运行工具,直到找到一个点,您可以说“如果我增加它,它开始出现失败的请求并且崩溃”。
根据您的网站,您将期望每分钟平均请求数。这种情况变化非常大,您将无法使用ab进行模拟。但是,请以这种方式考虑:如果您的平均用户每分钟点击5次请求,并且您认为有效的平均响应时间为2秒,则意味着在一分钟中的10秒钟内,1个用户将处理请求,这意味着仅有1/6的时间它将访问该网站。这也意味着,如果您有6个用户同时使用ab访问该网站,则在模拟中可能会有36个用户,即使您的并发级别(-c)仅为6。
这取决于您预期用户使用站点的行为,但是您可以从“我希望我的用户每分钟点击X个请求,并且如果平均响应时间为2秒,则我认为其有效”中获得此信息。然后只需修改-c级别,直到达到平均响应时间为2秒(但确保最大响应时间和stddev仍然有效),并查看您可以设置多大的-c。

6
直截了当的回答!您能否稍微解释一下为什么会出现这种情况:“这也意味着,如果您有6个用户同时访问网站,您很可能在模拟中有36个用户,尽管您的并发级别(-c)只有6。” 这是因为Apache Bench(ab)在测试期间使用了多个并发连接来模拟同时访问网站的用户。因此,当您设置-c参数为6时,每个连接将使用一个用户,但是每个用户在测试期间可以打开多个连接。所以,如果您有6个用户同时访问网站,则每个用户可以打开多个连接,从而使在模拟中的用户数增加到36个。 - kbariotis
4
温馨提示,如果页面具有动态内容,您可能需要添加“-l”选项,这样您就不会因为请求之间的内容长度不同而收到大量的请求失败。请注意保持原意并尽量简洁易懂。 - jonathancardoso
有没有办法模拟单个连接同时发出多个请求的情况?或者将并发值设置为>1是否已经模拟了这种行为? - variable
假设-c 2,那么它将并行进行2个请求。它现在会在进行下2个请求之前等待响应吗? - variable

87

请带我一步步运行命令以找出问题所在。

最简单的测试方法是执行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 个请求,而不是每次发送一个,以更好地模拟并发访问者(与连续访问者相比)。

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

我还发送了额外的标头 Accept-Encoding: gzip, deflate,因为 mod_deflate 几乎总是用于压缩文本/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服务器在更大的负载下更加稳定(例如,增加-n-c往往会导致Apache崩溃),您可以在此处阅读有关这些措施的详细信息:

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


14

在Windows上设置Apache Bench(AB)的步骤(我个人认为值得推荐)。

第一步 - 安装Xampp。
第二步 - 打开CMD。
第三步 - 从CMD进入apache bench目的地 (cd C:\xampp\apache\bin)。
第四步 - 粘贴命令 (ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)。
第五步 - 等待完成。你完成了


它不起作用...我得到了这个错误: 正在对本地主机进行基准测试(请耐心等待)...apr_socket_recv: 拒绝连接(111) - Vijaysinh Parmar
将localhost替换为127.0.0.1。 - akshaynagpal

3

我也很好奇是否可以使用Apache ab或构建/销毁PHP测量脚本或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 系统中):

bench.bat

"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是我期望的结果!


3

执行步骤: 负载测试命令

  • Step 1 - Install Xampp.
  • Step 2 - Open CMD.
  • Step 3 - Go to the Apache bench destination (cd C:\xampp\apache\bin) from CMD.
  • Step 4 - Paste the command
    ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:port/
    
  • Step 5 - Wait for it. You're done
  1. 仅限主要命令“获取”
ab -k -c 25 -n 2000 http://192.168.1.113:3001/api/v1/filters/3

3

-3

针对后置请求负载测试的最佳解决方案之一。请点击此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接