您当前的位置: 首页 >  网络

恐龙弟旺仔

暂无认证

  • 0浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

系统网络性能评估实战

恐龙弟旺仔 发布时间:2022-04-30 18:06:39 ,浏览量:0

前言:

说到性能评估,首先我们有两个方面需要确认:

* 我们要确认哪些性能点需要评估,有个具体的参数

* 使用哪些压测工具来进行评估

网络性能评估参数,就是笔者上一篇文章 机器网络配置与性能指标监控实战 中介绍的那些性能指标点:带宽、吞吐量、延迟、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,只能作罢。

参考:

极客时间

关注
打赏
1655041699
查看更多评论
立即登录/注册

微信扫码登录

0.0397s