ab负载testing
有人可以请我走过我如何使用Apache台式工具 ( ab
)加载testing我的网站的过程?
我想知道以下几点:
网站每分钟可以处理多less人?
请通过我应该运行的命令来解决这个问题。
我尝试了每一个教程,他们混乱。
Apache基准testing工具是非常基础的,虽然它会给你一些性能的坚实的想法, 但如果你打算让你的网站暴露在生产中的严重压力,只是依靠它是一个坏主意。
话虽如此,以下是最常见和最简单的参数:
-c
:(“并发”) 指示有多less客户(人/用户)将同时点击该网站。 在ab
运行时,会有-c
客户端击中该站点。 这实际上决定了您的网站在基准testing期间所受的压力。
-n
:表示要发送多less个请求。 这只是决定了基准的长度。 服务器可以支持的具有-c
值的-n
值是确保事物在持续压力下不会中断的好主意:5秒支持压力与5小时支持压力是不同的。
-k
:这个“KeepAlive”function浏览器本质上是做的。 你不需要为-k
传递一个值,因为它是“boolean”(意思是:它表明你希望你的testing使用来自HTTP的Keep Alive标题并且维持连接)。 由于浏览器这样做,你可能想模拟你的网站从浏览器的压力和stream量,build议你做一个基准。
最后一个参数就是主持人。 默认情况下,如果你不指定它,它将会打到http://协议。
ab -k -c 350 -n 20000 example.com/
通过发出上面的命令,您将打到http://example.com/并同时连接350个连接,直到满足20万个请求。; 这将使用保持活动标题完成。
过程完成2万个请求后,您将收到有关统计信息的反馈。 这将告诉你,在使用上面的参数时,在你施加的压力下,网站的performance如何。
为了找出网站可以同时处理多less人,只要看看响应时间(手段,最小和最大响应时间,失败请求等)是您的网站可以接受的数字(不同网站可能需要不同的速度)。 你可以使用不同的-c值来运行这个工具,直到你点击你所说的“如果我增加它,它就开始获取失败的请求并且中断”。
根据您的网站,您会预计每分钟的平均请求数。 这个变化很大,你不能用ab来模拟这个。 然而,这样考虑一下:如果你的普通用户每分钟打5个请求,而你认为有效的平均响应时间是2秒,那就意味着一分钟内有10分钟的用户将被请求,它的1/6的时间将会击中网站。 这也意味着,如果有6个用户同时访问网站,即使您的并发级别(-c)仅为6,您也可能有36个用户进行模拟。
这取决于您对使用该站点的用户期望的行为,但您可以从“我希望我的用户每分钟点击X个请求,并且我认为平均响应时间有效,如果它是2秒”。 然后修改你的-c级别,直到你达到2秒的平均响应时间(但是确保最大响应时间和stddev仍然有效),看看你能做多大-c。
我希望我解释清楚:)祝你好运
请通过我应该运行的命令来解决这个问题。
你可以做的最简单的testing就是执行1000个请求,每次10个(大约模拟10个并发用户每次获得100个页面 – 在整个testing期间)。
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服务器在每次请求完成后不closures连接,而是保持重用。
我还发送额外的头Accept-Encoding: gzip, deflate
因为mod_deflate几乎总是用来压缩文本/ html输出25%-75% – 由于它影响整体性能不应该被忽略的Web服务器(即可以在相同的时间内传输两倍的数据等)。
结果:
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,你有你的请求每分钟。
要获得真实世界的结果,你需要testingWordpress,而不是一些静态的HTML或index.php文件,因为你需要知道如何一起执行一起:包括复杂的PHP代码和多个MySQL查询…
例如,这里是在同一个系统和WAMP环境下testing新安装的Wordpress的结果(我使用WampDeveloper,但也有Xampp,WampServer和其他)。
Requests per second: 18.68 [#/sec] (mean)
现在慢了37倍!
在进行负载testing之后,可以采取一些措施来提高整体性能(每秒请求数),并使Web服务器在更大的负载下更稳定(例如,增加-n
和-c
趋于崩溃Apache),你可以在这里阅读:
用AB(Apache Bench)负载testingApache
在Windows上设置Apache Bench(AB)的步骤(IMO – 推荐)。
第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:yourport/
)
第5步 – 等待。 你做完了
仅使用ab来加载testingAPI是不够的。 不过,我认为这是一个很好的工具,可以让您了解您的网站的性能。
如果您想使用ab命令来testing多个API端点,使用不同的数据,所有在同一时间在后台,您需要使用“nohup”命令。 即使closuresterminal,它也会运行任何命令。
我写了一个简单的脚本,使整个过程自动化,随意使用它: http : //blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script