228

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

我想知道以下内容:

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

请引导我完成我应该运行的命令来解决这个问题。

我尝试了每个教程,它们令人困惑。

4

6 回答 6

363

apache 基准测试工具非常基础,虽然它可以让您对某些性能有一个坚实的了解,但如果您打算让您的网站在生产中承受严重的压力,那么仅依赖它是一个坏主意。

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

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

-n:表示将要发出多少个请求。这只是决定基准的长度。具有服务器可以支持的值的高-n-c是一个好主意,以确保事情不会在持续的压力下崩溃:支持 5 秒和 5 小时的压力是不一样的。

-k:这是浏览器天生具备的“KeepAlive”功能。您不需要传递一个值,-k因为它是“布尔值”(意思是:它表示您希望您的测试使用来自 HTTP 的 Keep Alive 标头并维持连接)。由于浏览器会执行此操作,并且您可能希望模拟您的网站从浏览器中获得的压力和流量,因此建议您对此进行基准测试。

最后一个参数只是主机。默认情况下,如果您不指定它,它将访问 http:// 协议。

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

通过发出上面的命令,您将访问http://example.com/并同时连接 350 个连接,直到满足 20,000 个请求。它将使用 keep alive 标头来完成。

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

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

根据您的网站,您预计每分钟的平均请求数。这变化很大,您将无法使用 ab 模拟它。但是,请这样想:如果您的平均用户每分钟会遇到 5 个请求,并且您认为有效的平均响应时间是 2 秒,这意味着每分钟 10 秒有 1 个用户会收到请求,这意味着仅有 1/6 的时间会到达网站。这也意味着,如果您有 6 个用户同时使用 ab 访问该站点,那么您可能有 36 个用户在模拟中,即使您的并发级别 (-c) 只有 6。

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

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

于 2012-10-04T17:19:10.943 回答
80

请引导我完成我应该运行的命令来解决这个问题。

您可以做的最简单的测试是执行 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 环境中测试全新安装的 Wordpress 的结果(我使用的是 WampDeveloper,但也有 Xampp、WampServer 等)...

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

现在慢了 37 倍!

在负载测试之后,您可以做很多事情来提高整体性能(每秒请求数),并且还可以使 Web 服务器在更大负载下更加稳定(例如,增加Apache-n并且-c倾向于崩溃),即你可以在这里阅读:

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

于 2014-08-22T18:59:21.113 回答
12

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

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

于 2017-03-23T10:33:10.347 回答
3

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

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

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

于 2016-10-27T10:36:34.633 回答
3

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

最后两个对我来说失败了:它们是近似的。之后我想尝试“ab”和“abs”。

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

但是有没有人想到任何 apache 服务器上的“localhost”,例如 www.apachefriends.org?

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

然后:基准测试!

长凳.php

<?php

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

无效的.php

<?php
?>

在您的桌面上,您应该使用这样的 .bat 文件(在 Windows 中):

板凳.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

现在,如果你密切关注...

void 脚本不会产生零结果!!!所以结论是:从第二个结果来看,第一个结果应该减少!!!

我得到了:

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

于 2018-10-18T15:58:19.707 回答
0

执行步骤:负载测试命令

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

  1. 仅主命令“获取”</li>
ab -k -c 25 -n 2000 http://192.168.1.113:3001/api/v1/filters/3
于 2021-03-25T09:40:10.877 回答