undefined

评估系统的网络性能

对于各协议层的性能进行测试

一、转发性能

网络接口层和网络层,他们主要负责网络包的封装、寻址、路由以及发送和接收。在这两个网络协议层中,每秒可处理的网络包数 PPS,就是最重要的性能指标。特别是 64B 小包的处理能力。

测试网络包的处理能力,使用 pktgen 。详情:https://time.geekbang.org/column/article/81497

二、TCP/UDP 性能

使用 iperf 。详情:https://time.geekbang.org/column/article/81497

三、HTTP性能

ab 是 Apache 自带的 HTTP 压测工具,主要测试 HTTP 服务的每秒请求数、请求延迟、吞吐量以及请求延迟的分布情况等

安装 ab 工具:yum install -y httpd-tools

比如在一台机器上部署一个 nginx 服务,然后在另一台机器上用 ab 来测试他的性能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[root@VM_14_255_centos ~]# ab -c 1000 -n 10000 http://9.134.239.95:1100/
Benchmarking 9.134.239.95 (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: nginx/1.20.2
Server Hostname: 9.134.239.95
Server Port: 1100

Document Path: /
Document Length: 612 bytes

Concurrency Level: 1000
Time taken for tests: 0.868 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 8450000 bytes
HTML transferred: 6120000 bytes
Requests per second: 11515.17 [#/sec] (mean)
Time per request: 86.842 [ms] (mean)
Time per request: 0.087 [ms] (mean, across all concurrent requests)
Transfer rate: 9502.26 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 6.5 1 26
Processing: 4 9 28.7 6 817
Waiting: 1 9 28.7 6 817
Total: 5 12 29.9 7 820

Percentage of the requests served within a certain time (ms)
50% 7
66% 7
75% 7
80% 7
90% 8
95% 37
98% 43
99% 56
100% 820 (longest request)

ab 的测试结果分为三个部分,分别是请求汇总、连接时间汇总还有请求延迟汇总。在请求汇总部分,可以看到:

  • Requests per second 为 1074
  • 每个请求的延迟(Time per request)分为两行,第一行的 927 ms 表示平均延迟,包括了线程运行的调度时间和网络请求响应时间,而下一行的 0.927ms ,则表示实际请求的响应时间
  • Transfer rate 表示吞吐量(BPS)为 890 KB/s

连接时间汇总部分,则是分别展示了建立连接、请求、等待以及汇总等的各类时间,包括最小、最大、平均以及中值处理时间

最后的请求延迟汇总部分,则给出了不同时间段内处理请求的百分比,比如, 90% 的请求,都可以在 274ms 内完成

四、应用负载性能

使用 ab 工具,可以得到某个页面的访问性能,但这个结果跟用户的实际请求,很可能不一致。因为用户请求往往会附带着各种各种的负载(payload),而这些负载会影响 Web 应用程序内部的处理逻辑,从而影响最终性能。为了得到应用程序的实际性能,就要求性能工具本身可以模拟用户的请求负载。我们还可以用 wrk、TCPCopy、Jmeter 或者 LoadRunner 等实现这个目标。

1
2
3
4
5
6
7
8
9
10
[root@VM_14_255_centos ~]# wrk -c 1000 -t 2 http://9.134.239.95:1100/
Running 10s test @ http://9.134.239.95:1100/
2 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 59.99ms 205.14ms 2.00s 94.62%
Req/Sec 23.98k 4.16k 35.94k 77.00%
477107 requests in 10.01s, 386.75MB read
Socket errors: connect 0, read 399, write 0, timeout 280
Requests/sec: 47684.24
Transfer/sec: 38.65MB

如上使用 wrk,使用 2 个线程、并发 1000 连接,重新测试了 Nginx 性能,每秒请求数为 47684,吞吐量为 38MB,平均延迟为 59ms