ab负载测试

时间:2012-10-04 17:02:53

标签: apache benchmarking

有人可以告诉我如何使用apache bench toolab)加载测试我的网站吗?

我想知道以下内容:

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

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

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

6 个答案:

答案 0 :(得分:287)

apache基准测试工具非常基础,虽然它可以让您对某些性能有一个很好的了解,但如果您计划让您的网站在生产中遇到严重压力,那么仅依靠它是一个坏主意

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

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

-n:表示将要发出多少请求。这只是决定了基准的长度。服务器可以支持-n值高的-c值是一个好主意,可以确保在持续的压力下不会出现问题:支持5秒钟的压力与5秒的压力不同小时。

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

最后一个论点就是主持人。默认情况下,如果您不指定它,它将命中http://协议。

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

通过发出上述命令,您将使用350个同时连接点击http://example.com/,直到满足2万个请求。它将使用keep alive标头完成。

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

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

根据您的网站,您将获得每分钟平均请求数。这变化很大,你将无法用ab来模拟这个。但是,请考虑这种方式:如果您的普通用户每分钟会发出5个请求,并且您发现有效的平均响应时间是2秒,这意味着10分钟内的1个用户将处于请求状态,这仅表示1/6的时间它将击中该网站。这也意味着如果有6个用户同时使用ab访问该站点,即使您的并发级别(-c)仅为6,您也可能有36个用户进行模拟。

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

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

答案 1 :(得分:64)

  

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

您可以做的最简单的测试是执行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标头,要求网络服务器在每次请求完成后不关闭连接,而是继续重复使用。

我也发送了额外的标题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服务器在更高负载下更稳定(例如,增加-n-c往往会崩溃Apache),你可以在这里阅读:

Load Testing Apache with AB (Apache Bench)

答案 2 :(得分:7)

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

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:0)

我也很好奇我是否可以使用apache abs,construct / destruct 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中),如下所示:

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

答案 5 :(得分:0)

执行步骤: 负载测试命令

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

  1. 仅主命令“获取”
ab -k -c 25 -n 2000 http://192.168.1.113:3001/api/v1/filters/3