磨刀不误砍柴工,搞定云网络系统性能测试
一、前言
在部署或管理网络系统时,我们更多的是关心网络的连通性,而对于其整体的性能往往考虑不多,或者即使考虑到性能、异常或稳定性的问题,但却发现没有合适的手段去测试或监控网络健康状况。在本文中,首先简单介绍一下网络性能测试指标重点会关注哪些指标、在开展性能测试时,如何预估系统性能以便合理的规划和部署测试环境,然后会介绍基本的网络连通性测试工具、网络性能测试工具以及在开展性能测试时如何部署监控,更加直观的统计性能指标等。因为社区中已经有非常完善的文档,本文不再重复造轮子,只是简单地介绍并辅以几个简单demo实例,旨在雁过留声,抛砖引玉。平时遇到问题时能够提供一些解决方案或思路,欢迎各位大佬指教。
1.1 网络性能测试指标
性能测试的目的是以性能指标预期为前提,对系统进行施压,验证系统在无资源性能瓶颈的情况下,是否能达到预期目标。对于不同的服务或应用场景,可能关注的指标侧重点存在一定差异,对于底层系统网络性能测试来说,通常会重点关注以下指标:
可用性,可用性是对一个系统最基本的要求,开展工作之前首先需要确认一下网络连通性,常规的工具主要有ping、fping、telnet、curl等工具判断网络链路是否通畅。需要注意的是,由于ping是基于ICMP协议实现的,能ping通只能说明网络是能通的,不能说明具备对应的端口访问权限。通常情况下需要结合telnet、curl等工具来判断网络连通性及服务可用性。
带宽BPS,每秒所能传送的比特数。通常所说的带宽指的是网络中节点之间的极限带宽,由于节点之间的链路通畅是不完全可见的,因此极限带宽通常是由组成网络的设备能力所决定的。
吞吐量(throughput),网络吞吐量是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽,通过网络吞吐量可以寻找出网络瓶颈。吞吐量的衡量符合马桶效应,比如,即使
client
和server
都被分别连接到各自的100M
以太网卡上,但是如果这两个100M
的以太网卡被10M
的交换机连接起来,那么10M
的交换机就是网络的瓶颈。吞吐量受带宽限制,吞吐量/带宽就是该网络链路的使用率PPS(packet per second),表示以网络包单位的传输速率。PPS通常用来评估网络的转发能力,而基于Linux服务器的转发,很容器受到网络包大小的影响,通常选择1bytes的数据包测试系统极限场景下的pps。
时延,表示从一端发出请求后直到收到远端响应所需要的时间。这个指标在不同场景中可能会有不同含义。它可以表示建立连接需要的时间(比如TCP握手延迟),或者一个数据包往返所需时间(比如RTT)
丢包率,网络丢包率是指测试中所丢失数据包数量占所发送数据包的比率,通常在吞吐量范围内测试。丢包率主要与客户端到网站服务器之间每段路由的网络拥塞程度有关。由于交换机和路由器的处理能力有限,当网络流量过高来不及处理时就将一部分数据包丢弃造成丢包。由于TCP/IP网络能够自动实现重发,这样发生丢包后不断重发,将造成更大量的丢包。因此,网络拥塞发生后经常会发生丢包率越来越高的现象,和马路上的交通堵塞十分相似。
抖动率:抖动率是网络延迟的变化量,它是由同一应用的任意两个相邻数据包在传输路由中经过网络延迟而产生;计算方法:抖动率由相邻数据包延迟时间差除以数据包序号差得到。
1.2 系统的网络性能评估
系统的性能指标,一般情况下会在产品需求文档中有较明确定义,QA同学以此为依据部署环境,开展测试任务。对于探索式的性能测试来讲,通常需要QA同学横向了解一下相关指标的合理范围,例如需要测试指定网卡性能表现,带宽跟物理网卡配置是直接关联的,网卡确定后,带宽也就确定了(实际带宽受限于整个网络链路中最小的那个模块),为了更加有效的预估,可以参考说明文档、竞品公布的性能数据或者根据经验值分析。比如测试网关的极限带宽,假设网关节点网卡配置为两张82599 10Gb网卡做bond1,那么理论极限带宽不会超过20Gb,加上物理损耗,实际评估的带宽约为15Gb~18Gb之间,假设客户端与服务端均采用相同规格物理机部署,单台物理机带宽上限约为8Gb,要想获得网关节点的真实极限带宽,客户端与服务端需要至少分别部署三台物理机。
二、 网络连通性测试工具
在完成测试方案设计、评审以及环境部署之后,首先需要做的是测试服务可用性,相关的测试工具上文中已有提及,这里主要简单介绍ping常规的使用方法,其它工具如mtr、NMap、Netcat、fping、paping等可通过man命令查看。
2.1.1 ping
首先简单介绍一下ICMP协议,ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ping命令是基于ICMP协议实现的。使用这个命令判断网络的连通性以及网速,也可实现域名解析,默认使用该命令会一直发送ICMP包直到用户手动中止,可以使用以下常用参数控制数据包的传输:
-c
命令指定发送数据包的个数-W
指定最长等待时间,如果有多张网卡-I
指定发送包的网卡-s
可以指定发送包的大小,默认包大小为64bytes
在ping过程中按下ctrl+|
会打印出当前的summary信息,统计当前发送包数量、接收数量、丢包率等。示例,如下一台云主机eth0配置了secondaryIP,需要测试一下网络连通性
需要说明的是与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping。如果某一主机ping通,则此主机将被打上标记,并从等待列表中移除,如果没ping通,说明主机无法到达,主机仍然留在等待列表中,等待后续操作。Fping程序类似于ping。Fping与ping不同的地方在于,fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件。
2.1.2 mtr
mtr(全称 my traceroute,是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具,功能更强大。mtr默认发送ICMP数据包进行链路探测,用户还可以通过-u参数来指定使用UDP数据包用于探测。相比traceroute只会做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。mtr能避免节点波动对测试结果的影响,所以其测试结果更正确。
mtr有Linux和Windows两种版本,在Windows系统下可以直接使用WinMTR工具,WinMTR是Windows下关于mtr的图形化工具,WinMTR下载地址。WinMTR无需安装,下载完毕后,直接解压运行即可。Linux环境下直接使用mtr命令即可,安装及命令行操作参考:
安装mtr工具
mtr (My traceroute)几乎是所有 Linux 发行版本预装的网络测试工具,集成了 tracert 与 ping 这两个命令的图形界
如上图所示,mtr测试结果每列数值的说明如下:
更多内容参考云社区
2.1.3 网猫netcat
NetCat是一个非常简单的Unix工具,可以读、写TCP或UDP网络连接,在linux和window环境下均可使用,社区文档非常丰富,实例参考下文链接.
netcat
使用的基本形式为:
常用的参数说明如下:
实例参考:Linux 中的 netcat 网络工具简介,“瑞士军刀”Netcat使用方法总结
2.1.4 xxxping
ping命令是一个很好用并且常用的网络测试工具,它是基于ICMP协议,但是出于网络安全等因素,大部分网络环境以及云环境可能都会禁止ICMP协议,所以在工作中,我们必须掌握一些其他比较流行的网络测试工具,比如tcpping、tcping、psping、hping、paping等几款网络测试工具。社区文档比较丰富,这里不再详细介绍。
三 、 网络性能测试工具
网络性能测试工具这里主要介绍两个常用的工具iperf和netperf,相关的工具如wrk 、pktgen等后续会加以补充
3.1 iperf
3.1.1 iperf简介
iperf(iperf3)是一个网络性能测试工具,采用C/S(客户端/服务器端)架构模式,可以测试TCP和UDP带宽、模拟网络故障等。利用iperf这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能,评估系统QOS。iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较快,版本最新。Windows版更新慢。Windows版的iperf叫jperf,或者xjperf。jperf是在iperf基础上开发了更好的UI和新的功能。
3.1.2 iperf安装及使用说明
源码安装参考iperf,推荐命令行直接安装
3.1.3 iperf实例
带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用-b 100M
进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。
UDP模式
服务器端:
客户端:
在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
客户端同时向服务器端发起30个连接线程,以5Mbps为数据发送速率。
以100M为数据发送速率,进行上下行带宽测试。
TCP模式
服务器端:
客户端:
在tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
客户端同时向服务器端发起30个连接线程。
3.1.4 参考
阿里云网络性能测试方法:https://www.alibabacloud.com/help/zh/faq-detail/55757.htm#top
腾讯云网络性能测试方法:https://cloud.tencent.com/document/product/213/11460
iperf命令:https://man.linuxde.net/iperf
3.2 netperf
3.2.1 netperf简介
Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。
Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试.在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果:在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能。
社区提供的开源Netperf只能满足两个9的时延数据统计,当进行精度较高的专项性能测试时显得无能为力,为此网易杭研云计算同学对此进行了二次开发,能够满足9999值数据统计,项目地址参考netperf-9999 。
netperf常用命令行参数如下选项:
3.2.2 netperf 网络测试模式说明
TCP_STREAM Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量
UDP_STREAM UDP_STREAM用来测试进行UDP批量传输时的网络性能。注意:此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示
测试UDP_STREAM模式下pps
TCP_RR ,TCP_RR方式的测试对象是建立一次连接之后多次TCP request和response的交易过程,该模式下可以得到长连接极限带宽或pps
测试TCP_RR长连接模式下pps
测试网络延迟和吞吐量
TCP_CRR 与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接
测试TCP_CRR短连接模式下pps
UDP_RR UDP_RR方式使用UDP分组进行request/response的交易过程
3.2.3 实例
测试网络带宽bps
在对端机器上启动netserver,这是netperf自带的一个服务端程序。可以不带任何参数启动。
在本机输入以下命令启动netperf:
可以看到,带宽的吞吐量基本上达到了约15G。
PPS
PPS 为每秒钟发送成功的数据包个数
具体计算方法:PPS = 数据包发送成功的数目/测试时间
可以在 Server 端用 sar 命令来统计实际收到的数据包,具体命令如下所示,其表示每隔 1 秒统计一次,统计 300 次,sar 命令最后会对 300 次的统计结果求平均
测试延迟
在对端机器上启动netserver。 在本机输入以下命令启动netperf:
可以看到,在resquest/response测试模式下,每秒的吞吐量为22547.84次,最小的时延为36微秒,最大为3605微秒,平均时延为44.23微秒。结果显示,有比较少的报文的延迟比较厉害,达到了毫秒级,但是大部分都在100微秒级
3.2.4 参考
物理专线网络性能测试方法:https://help.aliyun.com/document_detail/58625.html
netperf 与网络性能测量:https://www.ibm.com/developerworks/cn/linux/l-netperf/index.html
https://www.ibm.com/developerworks/cn/linux/l-netperf/index.html
三层网络PPS极限测试:https://blog.csdn.net/minxihou/article/details/84930250
netperf 和 iperf 网络性能测试小结:https://wsgzao.github.io/post/netperf/
网络性能测试方法: https://www.alibabacloud.com/help/zh/faq-detail/55757.htm
http 性能测试 wrk使用教程:https://juejin.im/post/6844903550288396296
四、网络数据监控工具
4.1 netdata
Netdata是Linux系统实时性能监测工具,以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu、内存、硬盘输入/输出、网络等linux性能的数据)Netdata是一个高度优化的Linux守护进程,它为Linux系统,应用程序,SNMP服务等提供实时的性能监测。它用可视化的手段,将被监测者最细微的细节,展现了出来。这样,你便可以清晰地了解你的系统和应用程序此时的状况。图片来源
netdata部署直接参考github。
实际效果参考:下图是通过netdata监控云主机eth0网卡的流量,可是直观的看到收方向和发方向的流量状况,相比sar
工具统计更为直观。
Fping类似于ping,但比ping强大。Fping与ping不同的地方在于,fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件。与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping。如果某一主机ping通,则此主机将被打上标记,并从等待列表中移除,如果没ping通,说明主机无法到达,主机仍然留在等待列表中,等待后续操作。
下图是netdata集成fping 监控网络连通性,其中 fping.conf 的配置文件为:
支持fping 监控
监控数据持久化保留30天数据
需要配置dbengine,理论上5G硬盘可以支持 每秒2000个数据点,30天。
启动时使用上面这个netdata.conf配置。
portcheck配置
这些都属于 https://learn.netdata.cloud/docs/agent/collectors/go.d.plugin 插件。
go.d.conf ,里面把需要监控的项目打开
nginx监控demo
docker 启动命令
4.2 Prometheus
参考我写的另外一篇文章:
4.3 参考
实时系统性能监控工具:https://github.com/netdata/netdata
续...
版权声明: 本文为 InfoQ 作者【毛爷爷】的原创文章。
原文链接:【http://xie.infoq.cn/article/f13a76baead545969a42f9c73】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论