有人能告诉我如何使用apache bench工具(ab
)加载测试我的网站吗?
我想知道以下内容:
网站每分钟能处理多少人
请引导我完成我应该运行的命令来解决这个问题。
我尝试了每一个教程,但它们都令人困惑。
Apache基准测试工具非常基础,虽然它会让您对一些性能有一个确切的了解,但如果您计划让您的站点在生产中面临严重压力,那么只依赖它是个坏主意
话虽如此,这里有最常见和最简单的参数:
-c
:("并发")。指示有多少客户端(人员/用户)将同时访问该网站。当ab
运行时,会有-c
客户端访问该站点。这实际上决定了你的网站在基准测试期间会承受多大的压力。
-n
:表示要发出的请求数。这只是决定了基准的长度。服务器可以支持较高的-n
值和-c
值,这是确保事情不会在持续压力下崩溃的好主意:支持压力5秒与支持压力5小时不同。
CCD_ 8:;KeepAlive";浏览器的功能性是天生的。你不需要为CCD_ 9传递一个值;布尔值";(意思是:它表示您希望测试使用HTTP中的Keep-Alive标头并维持连接)。由于浏览器会这样做,并且你可能想模拟浏览器给你的网站带来的压力和流量,所以建议你用它来做一个基准测试。
最后一个论点就是主持人。默认情况下,如果您不指定它,它将命中http://协议。
ab -k -c 350 -n 20000 example.com/
通过发出上面的命令,您将http://example.com/具有350个同时连接,直到满足20000个请求。这将使用keep-alive标头来完成。
在处理完2万个请求后,您将收到有关统计数据的反馈。这将告诉你,在使用上述参数时,网站在你施加的压力下表现得有多好。
为了了解网站同时可以处理多少人,只需查看响应时间(平均值、最小和最大响应时间、失败请求等)是否是网站可以接受的数字(不同的网站可能需要不同的速度)。你可以用不同的-c值运行该工具,直到你找到你说";如果我增加它,它就会开始收到失败的请求,并中断";。
根据您的网站,您预计每分钟的平均请求数。这变化很大,你无法用ab来模拟。但是,请这样想:如果你的平均用户每分钟会收到5个请求,而你发现有效的平均响应时间是2秒,这意味着一分钟中有10秒有1个用户会收到请求,这意味着您只有1/6的时间会到达网站。这也意味着,如果有6个用户同时使用ab访问网站,那么模拟中可能有36个用户,即使您的并发级别(-c)只有6。
这取决于你期望用户使用网站的行为,但你可以从";我期望我的用户每分钟达到X个请求,并且如果平均响应时间是2秒,我认为它是有效的";。然后只需修改您的-c级别,直到达到2秒的平均响应时间(但请确保最大响应时间和stddev仍然有效),然后看看您可以将-c设置为多大。
请引导我完成应该运行的命令以解决此问题。
您可以做的最简单的测试是执行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几乎总是用于压缩文本/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崩溃),您可以在这里阅读:
使用AB(Apache Bench)对Apache进行负载测试
在windows上设置Apache Bench(AB)的步骤(IMO-推荐)
步骤1-安装Xampp
步骤2-打开CMD
步骤3-从CMD转到apache工作台目的地(cd C:xamppapachebin
)
步骤4-粘贴命令(ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/
)
步骤5-等待它。您完成
仅使用ab对API进行负载测试是不够的。然而,我认为这是一个很好的工具,可以让你基本了解你的网站是如何表现的。
如果您想在中使用ab命令测试多个API端点,使用不同的数据,同时在后台进行测试,则需要使用"nohup"命令。即使关闭终端,它也会运行任何命令。
我写了一个简单的脚本,可以自动化整个过程,可以随意使用:http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script
我也很好奇是否可以用apache abs或construct/destruct php度量脚本或php扩展来测量脚本的速度。
最后两个对我来说失败了:它们是近似的。之后我想试试"ab"one_answers"abs"。
命令"ab-k-c350-n20000example.com/"很漂亮,因为它更容易!
但是有人想过在任何apache服务器上使用"localhost"吗?例如www.apachefriends.org?
您应该在根目录中创建一个文件夹,如"bench",其中有两个文件:test"bench.php"和reference"void.php".
然后:进行基准测试
bench.php
<?php
for($i=1;$i<50000;$i++){
print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>
无效.php
<?php
?>
在您的桌面上,您应该使用.bat文件(在Windows中),如下所示:
基准.bat
"c:xamppapachebinabs.exe" -n 10000 http://localhost/bench/void.php
"c:xamppapachebinabs.exe" -n 10000 http://localhost/bench/bench.php
pause
现在,如果你密切关注。。。
void脚本不会产生零结果!!!所以结论是:从第二个结果开始,第一个结果应该减少!!!
给我:
c:xampphtdocsbench>"c:xamppapachebinabs.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:xampphtdocsbench>"c:xamppapachebinabs.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:xampphtdocsbench>pause
Press any key to continue . . .
90-17=73我期待的结果
要执行的步骤:用于负载测试的命令
- 步骤1-安装Xampp
- 步骤2-打开CMD
- 步骤3-从CMD转到Apache工作台目标(
cd C:xamppapachebin
) - 步骤4-粘贴命令
ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:port/
- 第五步-等一下。你完了
- 仅主命令"获取">
ab -k -c 25 -n 2000 http://192.168.1.113:3001/api/v1/filters/3
请求后负载测试的最佳解决方案之一。点击此处