如何进行Web服务器性能基准测试?

你知道你的website’s average response time吗? 你知道你的网站能处理多少并发用户吗?

负载测试对于Web应用程序来说是必不可少的,以了解网站的容量。如果你要选择Web服务器,那么你首先要做的就是进行负载测试,看看哪个适合你。

基准测试可以帮助你决定:

  • 哪个Web服务器效果最好
  • 为了服务x个请求,你需要多少台服务器
  • 哪种配置给你最好的结果
  • 哪个技术堆栈表现更好
  • 你的网站何时会变慢或崩溃

有几个online tools to perform a stress test;然而,如果你正在寻找一种内部解决方案,或者只想对Web服务器性能进行基准测试,那么你可以使用ApacheBench,或者使用下面列出的其他工具。

我使用在DigitalOcean上托管的Apache和Nginx Web服务器进行了测试。

ApacheBench

ApacheBench (ab) 是一个与任何Web服务器配合使用的开源命令行程序。在本文中,我将解释如何安装这个小程序并执行负载测试来对结果进行基准测试。

Apache

让我们使用yum命令来安装ApacheBench。

yum install httpd-tools

如果你已经有了httpd-tools,那么你可以忽略这个步骤。

现在,让我们看看它在5000个请求和500个并发的情况下的性能如何。

[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
This is ApacheBench, Version 2.3 
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)
[root@lab ~]#

所以你可以看到,Apache每秒处理了373个请求,总共花费了13.389秒来处理所有请求。

现在你知道默认配置可以处理这么多请求,所以当你进行任何配置更改时,可以重新进行测试以比较结果并选择最好的配置。

Nginx

让我们进行与Apache相同的测试,这样你可以比较哪种性能更好。

[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
这是ApacheBench,版本2.3 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
许可给The Apache Software Foundation, http://www.apache.org/
对localhost进行基准测试(请耐心等待)
完成500个请求
完成1000个请求
完成1500个请求
完成2000个请求
完成2500个请求
完成3000个请求
完成3500个请求
完成4000个请求
完成4500个请求
完成5000个请求
完成5000个请求
服务器软件:        nginx/1.10.1
服务器主机名:        localhost
服务器端口:            80
文档路径:          /
文档长度:        3698字节
并发级别:      500
测试所用时间:   0.758 秒
完成的请求数:      5000
失败的请求:        0
写入错误:           0
总传输量:      19660000 字节
HTML传输量:       18490000 字节
每秒请求数:    6593.48 [#/秒] (平均值)
每个请求的时间:       75.832 [ms] (平均值)
每个请求的时间:       0.152 [ms] (平均值,所有并发请求之间的平均值)
传输速率:          25317.93 [Kbytes/秒] 接收
连接时间(毫秒)
最小  平均[+/-标准差] 中间值   最大值
连接:        0    6  11.0      2      53
处理:     5   19   8.2     17      53
等待:        0   18   8.2     16      47
总时间:         10   25  17.4     18      79
特定时间内的请求完成百分比(毫秒)
50%     18
66%     21
75%     21
80%     22
90%     69
95%     73
98%     75
99%     76
00%     79 (最长请求)
[root@lab ~]#

哇!

你看见了吗?

Nginx处理了6593个请求每秒!是个赢家。

所以你可以看到,只要比较两个web服务器,你就可以知道选择哪一个用于你的web应用程序。

上面的测试是在CentOS 6.8,64位上进行的。你可以尝试多种OS和Web服务器版本的组合以获得最佳结果。

不喜欢ApacheBench因为任何原因?别担心,还有很多其他可以用来进行HTTP负载的工具。

SIEGE

SIEGE 是一个在UNIX上支持的HTTP负载测试工具。你可以将多个URL放入一个文本文件中,以对其进行负载测试。你可以使用yum安装siege。

# yum install siege

让我们用500个并发请求运行5秒钟进行测试。

[root@lab ~]# 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
[root@lab ~]#

来解释一下这些参数。

-q – 安静地运行(不显示请求详情)

-t – 运行5秒钟

-c – 500个并发请求

所以你可以看到,可用性是100%,响应时间是0.04秒。你可以根据你的目标调整负载测试参数。

Ali

Ali 是一个相对较新的负载测试工具,用于实时分析。它支持多个平台进行安装,包括Docker。

安装后,执行ali以查看使用细节。

如上所示,您有一个选项可以发送HTTP头部、测试持续时间、速率限制、超时等等。我对Geekflare Tools进行了快速测试,以下是输出结果的样子。

报告是交互式的,提供了详细的延迟信息。

Gobench

Gobench是用Go语言编写的一个简单的负载测试工具,用于对Web服务器性能进行基准测试。它支持超过20,000个并发用户,而ApacheBench则不支持。

Apache JMeter

JMeter是最受欢迎的开源工具之一,用于测量Web应用程序的性能。JMeter是基于Java的应用程序,不仅可以用于测试Web服务器,还可以用于PHP、Java、ASP.net、SOAP、REST等。

JMeter拥有友好的GUI界面,最新版本3.0需要Java 7或更高版本才能启动应用程序。如果您的目标是优化Web应用程序的性能,一定要尝试使用JMeter。

wrk

wrk是另一个现代的性能测量工具,可以在您的Web服务器上施加负载,并提供延迟、每秒请求、每秒传输等详细信息。

使用wrk,您可以指定使用多少个线程运行负载测试。

让我们以使用8个线程、500个并发用户进行为期5分钟的测试为例。

wrk –t8 –c500 -d300s http://localhost

Autocannon

受到work的启发,autocannon是用Node.js编写的。您可以以编程方式、通过API或作为独立工具使用它。您只需要作为先决条件的是NodeJS installed

您可以控制连接数、请求数、持续时间、工作进程、超时、连接速率,并提供大量选项来对您的Web应用程序进行基准测试。

Curl-loader

curl-loader是用C语言编写的,用于模拟应用程序负载,支持SSL/TLS。除了网页测试,您还可以使用这个开源工具对FTP服务器进行负载测试。

您可以在单个批处理配置中创建包含HTTP、HTTPS、FTP和FTPS混合的测试计划。

httperf

httperf是一个专注于微观和宏观级别基准测试的高性能工具。它支持HTTP/1.1和SSL协议。

如果您知道预期的并发用户数量,并希望测试您的Web服务器是否能够处理这些请求数量,您可以使用以下命令。

httperf --server localhost --port 80 --num-conns 1000 --rate 100

上述命令将以每秒100个请求的速率进行1000个HTTP请求的测试。

Tsung

Tsung是一个多协议的分布式压力测试工具,用于对HTTP、SOAP、PostgreSQL、LDAP、XAMP、MySQL服务器进行压力测试。它支持HTTP/1.0、HTTP/1.1,并自动处理cookies。

通过Tsung生成报告是可行的。

结论

我希望上述基准测试工具可以让您对您的Web服务器性能有一个概念,并决定哪种工具最适合您的项目。

接下来,不要忘记monitor your website performance

类似文章