说到性能评估,首先我们有两个方面需要确认:
* 我们要确认哪些性能点需要评估,有个具体的参数
* 使用哪些压测工具来进行评估
网络性能评估参数,就是笔者上一篇文章 机器网络配置与性能指标监控实战 中介绍的那些性能指标点:带宽、吞吐量、延迟、PPS等
至于压测工具的话,下面我们逐个来介绍下
1.应用层性能测试按照7层网络协议模型,应用层应该是我们在实际工作中最常用的一层。
我们按照最常用的HTTP协议来测试,市面上的压测工具一般有ab(Apache自带的HTTP压测工具)、webbench等
这里我们使用ab工具来测试下 nginx的性能
1.1 准备工作需要先安装ab工具,笔者使用的是Ubuntu docker来作为压测平台,安装下ab
$ apt-get install -y apache2-utils
另外启动一个nginx docker,作为被测试平台
$ docker run -p 80:80 -itd nginx
1.2 压测nginx
# -c 并发请求量为1000
# -n 总请求量为10000
# 访问地址为http://192.168.3.18:80/
root@93de58bae514:/# ab -c 1000 -n 10000 http://192.168.3.18: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 192.168.3.18 (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.21.5
Server Hostname: 192.168.3.18
Server Port: 80
Document Path: /
Document Length: 615 bytes
Concurrency Level: 1000
Time taken for tests: 3.688 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 8480000 bytes
HTML transferred: 6150000 bytes
Requests per second: 2711.29 [#/sec] (mean)
Time per request: 368.828 [ms] (mean)
Time per request: 0.369 [ms] (mean, across all concurrent requests)
Transfer rate: 2245.29 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 46 32.2 38 163
Processing: 76 313 86.8 312 553
Waiting: 74 288 88.5 289 518
Total: 129 359 95.6 354 665
Percentage of the requests served within a certain time (ms)
50% 354
66% 400
75% 429
80% 440
90% 476
95% 519
98% 553
99% 633
100% 665 (longest request)
对上面的压测结果进行分析,重点就下面四行
Requests per second: 2711.29 [#/sec] (mean)
Time per request: 368.828 [ms] (mean)
Time per request: 0.369 [ms] (mean, across all concurrent requests)
Transfer rate: 2245.29 [Kbytes/sec] received
Requests per second(每秒请求数)= 2711.19
Time per request(每个请求的耗时):368ms,包括线程运行的调度时间和网络请求响应时间
Time per request(每个请求的耗时):0.369ms,表示实际请求的响应时间
Transfer rate(吞吐量):2245KB/s
总结:这里的结果是我们单纯测试nginx 80端口的响应所得到的的结果。
在实际的工作中,nginx后面肯定要对应上具体的web应用服务器,所以这里的数据只能作为nginx的一个参考,如果关联上具体的web应用服务器,加上业务处理逻辑,肯定又有所不同。
2.TCP层性能测试针对TCP层的性能测试,常用的工具有:iperf3和netperf
笔者在这里使用iperf3来测试
2.1 准备工作笔者在这里准备两台Ubuntu docker容器,分别用来模拟iperf3的服务端和客户端
老规矩,先安装iperf3(两台都需要安装)
root@93de58bae514:/# apt-get install iperf3
2.2 iperf3测试
2.2.1 启动服务端
# -s代表当前为服务端
# -i 1 每个1秒汇报一次
# -p 9999 服务启动在9999端口
root@7bc18553126f:/# iperf3 -s -i 1 -p 9999
-----------------------------------------------------------
Server listening on 9999
-----------------------------------------------------------
2.2.2 启动客户端
# -c 172.17.0.3 指定服务端的ip地址
# -b 10G 测试目标带宽为10G
# -t 15 测试时间为15秒
# -P 2 并发数为2
# -p 9999 测试服务端的端口为9999
root@93de58bae514:/# iperf3 -c 172.17.0.3 -b 10G -t 15 -P 2 -p 9999
Connecting to host 172.17.0.3, port 9999
[ 4] local 172.17.0.2 port 57428 connected to 172.17.0.3 port 9999
[ 6] local 172.17.0.2 port 57430 connected to 172.17.0.3 port 9999
注意:这里的-b 不要搞错了,可以在服务端通过以下命令来确定具体带宽(笔者的带宽为10G,所以这里写的是10G)
root@93de58bae514:/# ethtool eth0 | grep Speed
Cannot get wake-on-lan settings: Operation not permitted
Speed: 10000Mb/s
2.2.3 测试结果
可以通过服务端看到以下结果输出
Accepted connection from 172.17.0.2, port 57426
[ 5] local 172.17.0.3 port 9999 connected to 172.17.0.2 port 57428
[ 7] local 172.17.0.3 port 9999 connected to 172.17.0.2 port 57430
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 985 MBytes 8.26 Gbits/sec
[ 7] 0.00-1.00 sec 914 MBytes 7.67 Gbits/sec
[SUM] 0.00-1.00 sec 1.85 GBytes 15.9 Gbits/sec
...
[ 5] 15.00-15.00 sec 256 KBytes 4.64 Gbits/sec
[ 7] 15.00-15.00 sec 256 KBytes 4.90 Gbits/sec
[SUM] 15.00-15.00 sec 512 KBytes 9.28 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-15.00 sec 0.00 Bytes 0.00 bits/sec sender
[ 5] 0.00-15.00 sec 16.4 GBytes 9.38 Gbits/sec receiver
[ 7] 0.00-15.00 sec 0.00 Bytes 0.00 bits/sec sender
[ 7] 0.00-15.00 sec 15.5 GBytes 8.89 Gbits/sec receiver
[SUM] 0.00-15.00 sec 0.00 Bytes 0.00 bits/sec sender
[SUM] 0.00-15.00 sec 31.9 GBytes 18.3 Gbits/sec receiver
我们直接看最后SUM两行记录
总耗时15秒
receiver(接收)的吞吐量为18.3Gb/s
性能还是杠杆的
总结:本文通过iperf3工具测试了docker Ubuntu的吞吐量;
通过ab工具测试了docker nginx的TPS,时延及吞吐量;
实际还可以测试下网络层的包转发性能,测试下PPS数,这个可以通过pktgen来测试下。
奈何笔者总也搞不好这个pktgen,只能作罢。
参考:极客时间