如何执行Web服务器性能基准测试()

本文概述

  • ApacheBench
  • SIEGE
  • Gobench
  • Apache JMeter
  • wrk
  • Httpload
  • curl-loader
  • httperf
  • Tsung
你知道你网站的平均响应时间吗?你知道你的网站可以处理多少个并发用户吗?
负载测试对于Web应用程序了解网站容量至关重要。如果要选择Web服务器, 那么要做的第一件事就是执行负载测试, 然后看看哪一个对你来说效果很好。
标杆管理可以帮助你做出决定;
  • 哪个Web服务器效果最好
  • 你需要服务的服务器数量x请求数量
  • 哪种配置可为你带来最佳效果
有几种在线工具可以进行压力测试。但是, 如果你正在寻找内部解决方案或仅对Web服务器性能进行基准测试, 则可以使用ApacheBench以及下面列出的一些工具。
我已经使用DigitalOcean上托管的Apache&Nginx Web服务器对其进行了测试。
工具清单
  • ApacheBench
  • SIEGE
  • Gobench
  • Apache JMeter
  • wrk
  • Httpload
  • curl-loader
  • httperf
  • Tsung
ApacheBenchApacheBench(ab)是可与任何Web服务器一起使用的开源命令行程序。在这篇文章中, 我将解释如何安装这个小程序并执行负载测试以对结果进行基准测试。
Apache
让我们使用yum命令安装ApacheBench。
yum install httpd-tools

如果你已经拥有httpd工具, 则可以忽略它。
现在, 让我们看看它如何处理500个并发的5000个请求。
[[email  protected] ~]# ab -n 5000 -c 500 http://localhost:80/ This is ApacheBench, Version 2.3 < $Revision: 655654 $> 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 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software:              Apache/2.2.15 Server Hostname:              localhost Server Port:                      80 Document Path:                  / Document Length:              4961 bytes Concurrency Level:          500 Time taken for tests:    13.389 seconds Complete requests:          5000 Failed requests:              0 Write errors:                    0 Non-2xx responses:          5058 Total transferred:          26094222 bytes HTML transferred:            25092738 bytes Requests per second:      373.45 [#/sec] (mean) Time per request:            1338.866 [ms] (mean) Time per request:            2.678 [ms] (mean, across all concurrent requests) Transfer rate:                  1903.30 [Kbytes/sec] received Connection Times (ms) min  mean[+/-sd] median    max Connect:              0    42  20.8        41      1000 Processing:        0  428 2116.5        65    13310 Waiting:              0  416 2117.7        55    13303 Total:                51  470 2121.0      102    13378 Percentage of the requests served within a certain time (ms) 50%      102 66%      117 75%      130 80%      132 90%      149 95%      255 98%  13377 99%  13378 100%  13378 (longest request) [[email  protected] ~]#

因此, 你可以看到, Apache每秒处理373个请求, 并且总共花费了13.389秒来处理所有请求。
现在你知道默认配置可以满足许多请求, 因此当你进行任何配置更改时, 你可以再次进行测试以比较结果并选择最佳结果。
Nginx的
让我们测试一下我们对Apache所做的工作, 以便你可以比较哪个性能更好。
[[email  protected] ~]# ab -n 5000 -c 500 http://localhost:80/ This is ApacheBench, Version 2.3 < $Revision: 655654 $> 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 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software:              nginx/1.10.1 Server Hostname:              localhost Server Port:                      80 Document Path:                  / Document Length:              3698 bytes Concurrency Level:          500 Time taken for tests:    0.758 seconds Complete requests:          5000 Failed requests:              0 Write errors:                    0 Total transferred:          19660000 bytes HTML transferred:            18490000 bytes Requests per second:      6593.48 [#/sec] (mean) Time per request:            75.832 [ms] (mean) Time per request:            0.152 [ms] (mean, across all concurrent requests) Transfer rate:                  25317.93 [Kbytes/sec] received Connection Times (ms) min  mean[+/-sd] median    max Connect:              0      6  11.0          2          53 Processing:        5    19    8.2        17          53 Waiting:              0    18    8.2        16          47 Total:                10    25  17.4        18          79 Percentage of the requests served within a certain time (ms) 50%        18 66%        21 75%        21 80%        22 90%        69 95%        73 98%        75 99%        76 00%        79 (longest request) [[email  protected] ~]#

哇!你看到了吗? Nginx每秒处理6593个请求!赢家。
因此, 你只需要与两台Web服务器进行比较, 便会了解为Web应用程序选择哪一台。
以上测试是在CentOS 6.8(64位)上进行的。你可以尝试OS和Web Server版本的多种组合以获得最佳结果。
SIEGESIEGE是UNIX支持的HTTP负载测试实用程序。你可以在一个文本文件中放入多个URL, 以进行测试。你可以使用yum安装围攻。
# yum install siege

让我们以500个并发请求运行测试5秒钟。
[[email  protected] ~]# siege -q -t 5S -c 500 http://localhost/ Lifting the server siege...          done. Transactions:                                          4323 hits Availability:                          100.00 % Elapsed time:                                          4.60 secs Data transferred:             15.25 MB Response time:                                    0.04 secs Transaction rate:           939.78 trans/sec Throughput:                                              3.31 MB/sec Concurrency:                                        37.97 Successful transactions:              4323 Failed transactions:                            0 Longest transaction:                    1.04 Shortest transaction:                    0.00 [[email  protected] ~]#

分解参数。
-q –安静运行(不显示请求详细信息)
-t –运行5秒钟
-c – 500个并发请求
如你所见, 可用性为100%, 响应时间为0.04秒。你可以根据你的目标调整负载测试参数。
GobenchGobench用Go语言和简单的负载测试实用程序编写, 以基准测试Web服务器的性能。它支持超过20, 000个并发用户, 而ApacheBench不支持。
Apache JMeterJMeter是衡量Web应用程序性能的最受欢迎的开源工具之一。 JMeter是基于Java的应用程序, 不仅是Web服务器, 而且你可以将其用于PHP, Java。 ASP.net, SOAP, REST等
JMeter拥有不错的友好GUI, 并且最新版本3.0需要Java 7或更高版本才能启动该应用程序。如果你的目标是优化Web应用程序性能, 则必须尝试JMeter。
wrkwrk是另一个现代的性能评估工具, 可将负载加到你的Web服务器上, 并为你提供延迟, 每秒请求, 每秒传输等详细信息。
使用wrk, 你可以指定运行带有多个线程的负载测试。
让我们举一个例子, 对500个并发用户和8个线程进行5分钟的测试。
wrk –t8 –c500 -d300s http://localhost

HttploadHttpload可以从文件中读取多个URL, 也可以在命令参数中指定它。最新版本支持SSL / TLS, 这意味着你可以查询启用HTTPS(SSL)的网页URL。
测试启用SSL的URL时, 可以选择指定密码, 简单的test命令如下所示。
httpload -cipher AES256-SHA -parallel 200 -seconds 120 URL_LIST.txt

为了更好地理解它, 上面将针对200个并发用户运行测试2分钟。
curl-loadercurl-loader用C编写, 可以模拟应用程序负载, 它支持SSL / TLS。除了网页测试外, 你还可以使用此开源工具在FTP服务器上执行加载。
你可以在单个批处理配置中创建包含HTTP, HTTPS, FTP和FTPS的测试计划。
httperfhttperf是一种高性能工具, 专注于微观和宏观水平的基准测试。它支持HTTP / 1.1和SSL协议。
如果你期望并发用户数, 并且希望测试Web服务器是否可以满足一定数量的请求, 则可以使用以下命令。
httperf --server localhost --port 80 --num-conns 1000 --rate 100

【如何执行Web服务器性能基准测试()】上面的命令将以每秒100个请求的速度测试1000个HTTP请求。
TsungTsung是一种多协议分布式压力测试工具, 可以对HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL服务器进行压力测试。它支持HTTP / 1.0, HTTP / 1.1, 并且cookie被自动处理。
使用Tsung生成报告是可行的。
总结
我希望以上基准测试工具能使你对Web服务器的性能有所了解, 并帮助你确定最适合你的项目的工具。

    推荐阅读