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

您知道您网站的平均响应时间吗? 您知道您的站点可以处理多少并发用户吗?

负载测试对于 Web 应用程序了解网站容量至关重要。 如果您要选择网络服务器,那么您要做的第一件事就是执行负载测试,看看哪个适合您。

基准测试可以帮助您做出决定;

  • 哪个网络服务器效果最好
  • 您需要服务的服务器数量 x 请求数量
  • 哪种配置给你最好的结果
  • 哪些技术堆栈表现更好
  • 当您的网站执行速度变慢或崩溃时

有几种在线工具可以执行压力测试; 但是,如果您正在寻找内部解决方案或只想对网络服务器性能进行基准测试,那么您可以使用 ApacheBench 以及下面列出的一些工具。

我使用了托管在 Apache 和 Nginx 的网络服务器 数字海洋 测试它。

阿帕奇工作台

阿帕奇工作台 (ab) 是一个开源命令行程序,适用于任何网络服务器。 在这篇文章中,我将解释如何安装这个小程序并执行负载测试以对结果进行基准测试。

阿帕奇

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

yum install httpd-tools

如果你已经有 httpd-tools,那么你可以忽略它。

现在,让我们看看它如何处理 5000 个并发 500 的请求。

[[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 秒。

  如何离开 GroupMe 聊天

现在您知道默认配置可以满足这么多请求,因此当您进行任何配置更改时,您可以再次进行测试以比较结果并选择最佳的一个。

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 位上进行的。 您可以尝试操作系统和 Web 服务器版本的多种组合以获得最佳结果。

出于某种原因不喜欢 ApacheBench? 不用担心,您可以使用许多其他方法来执行 HTTP 加载。

  如何在 Ubuntu 上设置别名

围城

围城 是 UNIX 支持的 HTTP 负载测试实用程序。 您可以将多个 URL 放在一个文本文件中以加载测试。 您可以使用 yum 安装 siege。

# 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 秒。 您可以根据您的目标调整负载测试参数。

阿里

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

安装完成后,执行ali查看使用详情。

[email protected]:~# ali
no target given
Usage:
  ali [flags] <target URL>

Flags:
  -b, --body string         A request body to be sent.
  -B, --body-file string    The path to file whose content will be set as the http request body.
      --debug               Run in debug mode.
  -d, --duration duration   The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s)
  -H, --header strings      A request header to be sent. Can be used multiple times to send multiple headers.
  -k, --keepalive           Use persistent connections. (default true)
  -M, --max-body int        Max bytes to capture from response bodies. Give -1 for no limit. (default -1)
  -m, --method string       An HTTP request method for each request. (default "GET")
  -r, --rate int            The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50)
  -t, --timeout duration    The timeout for each request. 0s means to disable timeouts. (default 30s)
  -v, --version             Print the current version.

Examples:
  ali --duration=10m --rate=100 http://host.xz

Author:
  Ryo Nakao <[email protected]>
[email protected]:~#

正如您在上面看到的,您可以选择发送 HTTP 标头、测试持续时间、速率限制、超时等。 我对 techblik.com 工具进行了快速测试,输出如下所示。

  帮助您的办公室实现无纸化的简要指南 [7 Tools]

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

哥本奇

哥本奇 是用 Go 语言和简单的负载测试实用程序编写的,用于对 Web 服务器性能进行基准测试。 它支持 ApacheBench 不支持的超过 20,000 个并发用户。

阿帕奇 JMeter

JMeter 是衡量 Web 应用程序性能的最流行的开源工具之一。 JMeter 是基于 Java 的应用程序,不仅是 Web 服务器,而且您可以将它用于 PHP、Java。 ASP.net、SOAP、REST 等

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

工作

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

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

让我们举一个例子,运行 5 分钟的测试,有 500 个并发用户和 8 个线程。

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

自动加农炮

受工作启发, 自动加农炮 是用 Node.js 编写的。 您可以通过 API 或独立实用程序以编程方式使用它。 您只需要安装 NodeJS 作为先决条件。

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

卷曲加载程序

卷曲装载机 用 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

上面的命令将针对 1000 个 HTTP 请求以每秒 100 个请求进行测试。

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

使用 Tsung 生成报告是可行的。

结论

我希望上述基准测试工具能让您了解您的 Web 服务器性能并决定什么最适合您的项目。

接下来,不要忘记监控您的网站性能。