Linux环境下网络性能测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介:

网络性能测试的几项重要指标

1、可用性

测试网络性能的第一步是确定网络是否正常工作,最简单的方法就是使用ping命令,通过向远端的机器发送ICMP请求,并等待接收ICMP回应,来判断远端的机器是否连通,网络是否正常工作。

2、响应时间

ping命令的ICMP报文响应一次往返所花费时间就是响应时间,有很多因素会影响到响应时间,如网段的负荷,网络主机的负荷,广播风暴,工作不正常的网络设备等等。

3、网络利用率

网络利用率是指网络被使用的时间占总时间(即被使用的时间+空闲的时间)的比例。例如,Ethernet虽然是共享的,但同时却只能有一个报文在传输,因此在任一时刻,Ethernet或者是100%的利用率,或者是0%的利用率。计算一个网段的网络利用率相对比较容易,但是确定一个网络的利用率就比较复杂。因此,网络测试工具一般使用网络吞吐量和网络带宽容量来确定网络中两个节点之间的性能。

4、网络吞吐量

网络吞吐量是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽,通过网络吞吐量可以寻找出网络瓶颈。比如,即使clientserver都被分别连接到各自的100M以太网卡上,但是如果这两个100M的以太网卡被10M的交换机连接起来,那么10M的交换机就是网络的瓶颈。

5、网络带宽容量

与网络吞吐量不同,网络带宽容量指的是在网络的两个节点之间的最大可用带宽,这是由组成网络的设备能力所决定的。

使用iperf进行测试

iperf介绍

iperf是一个TCP/IP和UDP/IP性能测试工具,能够提供网络吞吐率信息,以及震动、丢包率、最大组和最大传输单元大小等统计信息,可以由这些信息来分析网络的通信性能、定位网络瓶颈。

iperf以client/server方式工作,服务器端和客户端都使用同一程序iperf,服务器端使用-s选项,而客户端则使用-c选项。在 client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来回传递着特殊的流量模式,以测试网络的性能。

iperf获取与安装

下载地址:http://iperf.sourceforge.net/

配置与安装:


 
  1. [root@rh tool]# tar -zxvf iperf-2.0.2.tar.gz
  2. [root@rh tool]# cd iperf-2.0.2
  3. [root@rh iperf-2.0.2]# ./configure --prefix=/usr/netperf
  4. [root@rh iperf-2.0.2]# make
  5. [root@rh iperf-2.0.2]# make install
  6. [root@rh iperf-2.0.2]# ls /usr/netperf

iperf的使用

启动server端:


 
  1. [root@rh iperf-2.0.2]# cd /usr/iperf/bin
  2. [root@rh bin]# ./iperf -s

还可以设置这些参数:

服务器端选项 环境变量选项 说明
-s, --server $IPERF_SERVER 在服务器端运行 iperf;
-D . 以后台方式运行 iperf 服务模式;
-R . 如果 iperf 正在运行,则将其终止运行;

启动client端:

用TCP的方式测试本机到192.168.0.138主机(-c 192.168.0.138)的网络性能,时长为60(-t 60),缓冲区的大小为8KB (-l 8k),每10(-i 10)打印一次测试结果。


 
  1. [root@rh iperf-2.0.2]# cd /usr/iperf/bin
  2. [root@rh bin]# ./iperf -c 192.168.0.138 -t 60 -l 8k -i 10
  3. ------------------------------------------------------------
  4. Client connecting to 192.168.0.138, TCP port 5001
  5. TCP window size: 23.2 KByte (default)
  6. ------------------------------------------------------------
  7. [ 3] local 192.168.0.137 port 42812 connected with 192.168.0.138 port 5001
  8. [ ID] Interval Transfer Bandwidth
  9. [ 3] 0.0-10.0 sec 1.64 GBytes 1.41 Gbits/sec
  10. [ 3] 10.0-20.0 sec 5.26 GBytes 4.52 Gbits/sec
  11. [ 3] 20.0-30.0 sec 5.26 GBytes 4.52 Gbits/sec
  12. [ 3] 30.0-40.0 sec 5.27 GBytes 4.53 Gbits/sec
  13. [ 3] 40.0-50.0 sec 5.26 GBytes 4.51 Gbits/sec
  14. [ 3] 50.0-60.0 sec 5.26 GBytes 4.52 Gbits/sec
  15. [ 3] 0.0-60.0 sec 27.9 GBytes 4.00 Gbits/sec

还可以设置这些参数:

客户端选项 环境变量选项 说明
-b, --bandwidth $IPERF_BANDWIDTH 指定客户端通过 UDP 协议发送信息的带宽,默认值为 1Mbps;

使用netperf进行测试

netperf介绍

netperf是一种网络性能测量工具,主要针对基于TCP或UDP的传输。netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/response)模式。netperf反应的是一个系统能以多快的速度向另一个系统发送数据,以及另一个系统能以多快的速度接受数据。

netperf是以client/server的方式工作,server端是netserver,用来侦听来自client 端的连接;client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试结果;在控制连接建立并传递了测试配置信息后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。

netperf可以模拟三种不同的TCP流量模式:

  • 单个TCP连接,批量(bulk)传输大量数据;
  • 单个TCP连接,client请求/server应答的交易(transaction)方式;
  • 多个TCP连接,每个连接中一对请求/应答的交易方式

netperf可以模拟两种UDP的流量模式:

  • 从client到server的单向批量传输;
  • 请求/应答的交易方式。

由于UDP传输的不可靠性,在使用 netperf时要确保发送的缓冲区大小不大于接收缓冲区大小,否则数据会丢失,netperf将给出错误的结果。因此,对于接收到分组的统计不一定准确,需要结合发送分组的统计综合得出结论。

netperf获取与安装

下载地址:http://www.netperf.org/netperf/

配置与安装:


 
  1. [root@rh tool]# tar -zxvf netperf-2.6.0.tar.gz
  2. [root@rh tool]# cd netperf-2.6.0
  3. [root@rh netperf-2.6.0]# ./configure --prefix /usr/netperf
  4. [root@rh netperf-2.6.0]# make
  5. [root@rh netperf-2.6.0]# make check
  6. [root@rh netperf-2.6.0]# make install
  7. [root@rh netperf-2.6.0]# ls /usr/netperf

netperf使用

启动server端:


 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netserver

启动client端:

1)TCP_STREAM模式。进行TCP批量传输性能测试。这是netperf缺省情况。

批量数据传输典型的例子有FTP和其他类似的网络应用(即一次传输整个文件)。根据使用传输协议的不同,批量数据传输又分为TCP批量传输和UDP批量传输。

用 TCP 批量传输的方式 (-t TCP_STREAM)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),每次发送本地发送测试分组的大小为2048Bytes (-m 2048)


 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t TCP_STREAM -H 192.168.0.138 -l 60 -- -m 2048
  3. MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET
  4. Recv Send Send
  5. Socket Socket Message Elapsed
  6. Size Size Size Time Throughput
  7. bytes bytes bytes secs. 10^6bits/sec
  8. 87380 16384 2048 60.00 5463.11

从上面netperf的输出结果中,可以得到如下信息:

  • 1)远端系统(即 server)使用大小为 87380 字节的 socket 接收缓冲;
  • 2)本地系统(即 client)使用大小为 16384 字节的 socket 发送缓冲;
  • 3)向远端系统发送的测试分组大小为 2048 字节,通过 -m 2048 设置;
  • 4)测试经历的时间为 60 秒;
  • 5)吞吐量的测试结果为 5463.11 Mbps;

在缺省的情况下,netperf向远端系统发送的测试分组大小会设置为本地系统所使用的 socket 发送缓冲大小。

还可以设置这些局部命令行参数:

客户端选项 变量 说明
-s $size 设置本地系统的 socket 发送与接收缓冲大小;
-S $size 设置远端系统的 socket 发送与接收缓冲大小;
-m $size 设置本地系统发送测试分组的大小;
-M $size 设置远端系统接收测试分组的大小;
-D . 对本地与远端系统的 socket 设置 TCP_NODELAY 选项;

通过修改以上的参数,并观察测试结果的变化,可以确定是什么因素影响了连接的吞吐量。

例如,如果怀疑路由器由于缺乏足够的缓冲区空间,使得转发大的分组时存在问题,就可以改变测试分组的大小(-m),以观察吞吐量的变化。如果当测试分组由较大变为较小,而吞吐量出现较大的变化(比如吞吐量变大),说明网络中路由器确实存在缓冲区不足的问题。

2)UDP_STREAM,进行 UDP 批量传输性能测试。

需要注意的是此时测试分组的大小不能大于 socket 发送与接收的缓冲区大小,否则 netperf 会报错。

UDP_STREAM 方式使用与 TCP_STREAM 方式相同的局部命令行参数。

用 UDP 批量传输的方式 (-t UDP_STREAM)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),每次发送本地发送测试分组的大小为2048Bytes (-m 2048)


 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t UDP_STREAM -H 192.168.0.138 -l 60 -- -m 2048
  3. MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET
  4. Socket Message Elapsed Messages
  5. Size Size Time Okay Errors Throughput
  6. bytes bytes secs # # 10^6bits/sec
  7. 229376 2048 60.00 11159606 0 3047.29
  8. 229376 60.00 11115165 3035.15

可以看到,最后结果有两行,第一行数据显示的是本地系统的发送统计,这里的吞吐量表示 netperf 向本地 socket 发送分组的能力。但是由于 UDP 是不可靠的传输协议,发送出去的分组数量不一定等于接收到的分组数量;第二行数据显示的就是远端系统接收的情况,这里看到接收到的数据小于发送的数据,即存在丢包的情况。远端系统的接收吞吐量也小于本地发送吞吐量。

3)TCP_RR,在一个 TCP 连接中进行多次 request 和 response 的交易过程的性能测试。

这种方式常出现在数据库应用中,数据库与客户端程序建立一个 TCP 连接后,就在这个连接中传递数据库的多次交易过程。

用 TCP_RR 的方式(-t TCP_RR)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),设置 request 分组大小为 64Bytes,response 分组大小1024Bytes


 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t TCP_RR -H 192.168.0.138 -l 60 -- -r 64,1024
  3. MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET : first burst 0
  4. Local /Remote
  5. Socket Size Request Resp. Elapsed Trans.
  6. Send Recv Size Size Time Rate
  7. bytes Bytes bytes bytes secs. per sec
  8. 16384 87380 64 1024 60.00 9194.92
  9. 16384 87380

这里的输出结果有两行,第一行数据显示的是本地系统的信息,第二行数据显示的远端系统的信息。Trans. Rate per sec 是平均交易率。

通常增加 request/response 分组的大小会使得交易率下降。相对于实际的系统,这里的交易率的计算没有充分考虑到交易过程中的应用程序处理时延,因此结果会高于实际情况。

还可以设置这些参数:

客户端选项 变量 说明
-r $req,$resp 设置 request 和 reponse 分组的大小;
-s $size 设置本地系统的 socket 发送与接收缓冲大小;
-S $size 设置远端系统的 socket 发送与接收缓冲大小;
-D . 对本地与远端系统的 socket 设置 TCP_NODELAY 选项;

4)TCP_CRR,与 TCP_RR 的方式不同,TCP_CRR 为每次交易建立一个新的 TCP 连接。测试这种情况的网络性能。

这种方式最典型的应用是 HTTP,每次 HTTP 交易是在一条单独的 TCP 连接中进行的,这个过程需要不停地建立新的 TCP 连接,并在交易结束后结束 TCP 连接,交易率会受到较大影响。

用 TCP_CRR 的方式(-t TCP_CRR)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),设置 request 分组大小为 64Bytes,response 分组大小 1024Bytes


 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t TCP_CRR -H 192.168.0.138 -l 60 -- -r 64,1024
  3. MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET
  4. Local /Remote
  5. Socket Size Request Resp. Elapsed Trans.
  6. Send Recv Size Size Time Rate
  7. bytes Bytes bytes bytes secs. per sec
  8. 16384 87380 64 1024 60.00 2728.00
  9. 16384 87380

这里的输出结果有两行,第一行数据显示的是本地系统的信息,第二行数据显示的远端系统的信息。Trans. Rate per sec 是平均交易率。

5)UDP_RR,使用 UDP 分组进行 request 和 response 交易过程的性能测试。

用 UDP_RR 的方式(-t UDP_RR)测试本机到 192.168.0.138 主机(-H 192.168.0.138)的网络性能,时长 60 秒(-l 60),设置 request 分组大小为 64Bytes,response 分组大小1024Bytes


 
  1. [root@rh netperf-2.6.0]# cd /usr/netperf/bin
  2. [root@rh bin]# ./netperf -t UDP_RR -H 192.168.0.138 -l 60 -- -r 64,1024
  3. MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET : first burst 0
  4. Local /Remote
  5. Socket Size Request Resp. Elapsed Trans.
  6. Send Recv Size Size Time Rate
  7. bytes Bytes bytes bytes secs. per sec
  8. 229376 229376 64 1024 60.00 10635.03
  9. 229376 229376

这里的输出结果有两行,第一行数据显示的是本地系统的信息,第二行数据显示的远端系统的信息。Trans. Rate per sec 是平均交易率。

UDP_RR 方式使用 UDP 分组进行 request/response 的交易过程。由于没哟 TCP 连接所带来的负担,所以交易率相对 TCP_RR 方式一般会有相应的提升。

但是如果出现了相反的结果,即交易率反而降低了,也不用太惊讶,因为这说明在网络中,路由器或其他网络设备对 UDP 采用了与 TCP 不同的缓冲区空间和处理技术。

其他注意事项

测试的时候,常常由于防火墙的原因造成网络不能连接,这时候可以设置或关闭防火墙后再测试。关闭和启动防火墙命令:


 
  1. service iptables stop/start;

后记

常用的网络性能测试工具除了 iperfnetperf,还有pathloadpathrateDBStcptrace等工具。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
10天前
|
测试技术
Fast网络速度测试工具
Fast是由Netflix提供的网络速度测试工具,可快速测量用户的下载、上传速度及延迟。其全球可用、无广告干扰,并支持多种设备。测试自动进行,结果以Mbps显示。此外,用户可通过“Show more info”查看上传速度和延迟(含缓冲膨胀)。Fast以其简单快捷的特点,帮助用户了解网络性能并解决潜在问题,是评估网速的理想选择。
45 0
Fast网络速度测试工具
|
2天前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
53 28
|
20天前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
90 20
|
13天前
|
Ubuntu Linux PHP
利用PHP压缩音频:Linux环境下的ffmpeg简易安装指南
希望这个指南能为你的编程之旅提供帮助。只需记住,每一行代码都像音乐的音符,组合在一起,创造出美妙的旋律。祝你编程愉快!
55 6
|
1月前
|
关系型数据库 MySQL 应用服务中间件
Linux 手动安装快速部署 LNMP 环境实战
本文详细记录了在阿里云ECS上手动搭建LNMP环境的过程,系统选用Ubuntu 24.04。主要内容包括:1) 使用`apt`安装Nginx和MySQL,并更新软件源;2) 编译安装PHP 8.4.5,配置PHP-FPM及环境路径;3) 配置MySQL root用户密码;4) 调整Nginx支持PHP解析并测试整体环境。通过此过程,重现手动配置服务器的细节,帮助熟悉各组件的安装与协同工作。
102 23
|
28天前
|
JSON 运维 Ubuntu
Linux下如何使用Curl进行网络请求
希望这篇文章能帮助您在Linux下更好地使用Curl进行网络请求。如有疑问,请随时提问!
92 10
|
2月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
76 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
2月前
|
关系型数据库 应用服务中间件 Linux
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
65 1
Linux云服务器如何搭建LNMP环境
|
2月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
283 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
1月前
|
虚拟化 网络虚拟化 Windows
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。

热门文章

最新文章