转:性能测试过程中的网络带宽及流量监视讨论

来源:互联网 发布:企业级软件架构设计 编辑:程序博客网 时间:2024/05/01 11:28

1.  概述

在性能测试过程中,随着B/S结构网络应用的越来流行,界面元素的不断丰富、系统并发用户量的不断增加,在性能测试过程中,对网络带宽的消耗越来越大。在测试中,如何以前得测试环境下的实际网络带宽情况;如何保证测试过程中不因为网络带宽造成系统的瓶颈从而影响性能测试结果的准确性,如何确认现有的网络传输设备在大负载下能够稳定的进行网络数据的传输与交换……在现在,已经成了性能测试中必须要考虑的一个问题。

2.  测试环境中最大网络流量的确定

2.1            最简单的网络流量测量方法

l        下载速度

最简单的网络流量测试,莫过于通过一些网络下载工具来对两点之间的网络传输带宽进行测试。比如使用Flashget(http/ftp)flashFXP(ftp,上传/下载)等工具进行性能测试。

测试网络的下载带宽,如果采用HTTP协议,可以将一个较大的文件放置在应用中可以通过HTTP协议访问的目录下,然后通过下载工具下载这个文件,这样,就可以在下载工具的流量显示中,大体了解到当前网络的性能情况。同时,也可以采用FTP协议进行数据的下载,来测试网络的带宽情况(特别是在UnixLinux环境下,由于系统默认都开通了FTP服务,所以,在通过这种方式测试带宽的时候,相对方便很多)。

l        上传速度

通过HTTP方式进行网络上传带宽的测试,一般相对较复杂,而且也不够准确,很难得出最网络最大上传带宽。这种情况下,一般通过FTP工具进行ftp文件的上传,通过这种方式来进行网络带宽的测试。

(图:使用FlashFXP进行网络下载的带宽测试)

    采用这种方式进行测试,最大的一个优点就是简单易行,可以相当方便的对当前测试环境下的网络传输带宽进行。

而采用这种方式的缺点也很明显:测试结果不够准确。无法模拟多种网络请求下的网络带宽情况;无法进行大并发请求下复杂数据类型传输的网络带宽测试(特别是某些低档网络交换设备,在处理请求较少时,可以达到设备上标称的带宽,但是当并发请求数量增大之后,带宽迅速下降);无法提供一些相对详细的网络信息,如:震动、丢包率、最大段和最大传输单元大小等统计信息。

2.2            使用Ipref进行网络流量测试

Iperf 是一个 TCP/IP UDP/IP 的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够更好的帮助我们测试网络性能,定位网络瓶颈。

Iperf是一个免费的DOS下的命令行工具,这样,我们可以很方便的在Windows平台下使用这个工具,同时,他也是一个使用CC++语言混合编写的开源软件,在SourceForgeproject地址:http://sourceforge.net/projects/iperf)上可以下载到它最新的源码,我们在自己编译以后,就可以在各个操作系统上进行使用。

为了方便大家使用,在Sourceforge上也提供了一个用java开发出界面的Jperf(实际上就是用Java Iperf做了个shell程序)

(图:Jperf的界面)

    下面先说说Iperf的使用参数。在命令行中输入:“iperf –h”,则会有如下的帮助信息:

Usage: iperf [-s|-c host] [options]

       iperf [-h|--help] [-v|--version]

 

Client/Server:

  -f, --format    [kmKM]   format to report: Kbits, Mbits, KBytes, MBytes

  -i, --interval  #        seconds between periodic bandwidth reports

  -l, --len       #[KM]    length of buffer to read or write (default 8 KB)

  -m, --print_mss          print TCP maximum segment size (MTU - TCP/IP heade

  -o, --output    <filename> output the report or error message to this speci

d file

  -p, --port      #        server port to listen on/connect to

  -u, --udp                use UDP rather than TCP

  -w, --window    #[KM]    TCP window size (socket buffer size)

  -B, --bind      <host>   bind to <host>, an interface or multicast address

  -C, --compatibility      for use with older versions does not sent extra ms

  -M, --mss       #        set TCP maximum segment size (MTU - 40 bytes)

  -N, --nodelay            set TCP no delay, disabling Nagle's Algorithm

  -V, --IPv6Version        Set the domain to IPv6

 

Server specific:

  -s, --server             run in server mode

  -D, --daemon             run the server as a daemon

  -R, --remove             remove service in win32

 

Client specific:

  -b, --bandwidth #[KM]    for UDP, bandwidth to send at in bits/sec

                           (default 1 Mbit/sec, implies -u)

  -c, --client    <host>   run in client mode, connecting to <host>

  -d, --dualtest           Do a bidirectional test simultaneously

  -n, --num       #[KM]    number of bytes to transmit (instead of -t)

  -r, --tradeoff           Do a bidirectional test individually

  -t, --time      #        time in seconds to transmit for (default 10 secs)

  -F, --fileinput <name>   input the data to be transmitted from a file

  -I, --stdin              input the data to be transmitted from stdin

  -L, --listenport #       port to recieve bidirectional tests back on

  -P, --parallel  #        number of parallel client threads to run

  -T, --ttl       #        time-to-live, for multicast (default 1)

 

Miscellaneous:

  -h, --help               print this message and quit

  -v, --version            print version information and quit

 

[KM] Indicates options that support a K or M suffix for kilo- or mega-

 

The TCP window size option can be set by the environment variable

TCP_WINDOW_SIZE. Most other options can be set by an environment variable

IPERF_<long option name>, such as IPERF_BANDWIDTH.

注意:参数区分大小写

相关参数的简单中文解释如下(转自网络)

-s server模式启动egiperf -s

-c hostclient模式启动hostserver端地址egiperf -c 222.35.11.23

通用参数

-f [k|m|K|M] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告默认以Mbits为单位,eg:iperf -c 222.35.11.23 -f K

-i sec 以秒为单位显示报告间隔eg:iperf -c 222.35.11.23 -i 2

-l 缓冲区大小默认是8KB,eg:iperf -c 222.35.11.23 -l 16

-m 显示tcp最大mtu值

-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o c:/iperflog.txt

-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999

-u 使用udp协议

-w 指定TCP窗口大小,默认是8KB

-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)

-C 兼容旧版本(当server端和client端版本不一样时使用)

-M 设定TCP数据包的最大mtu值

-N 设定TCP不延时

-V 传输ipv6数据包

 

server专用参数

-D 以服务方式运行ipserf,eg:iperf -s -D

-R 停止iperf服务,针对-D,eg:iperf -s -R

 

client端专用参数

-d 同时进行双向传输测试

-n 指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000

-r 单独进行双向传输测试

-t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5

-F 指定需要传输的文件

-T 指定ttl值

备注:相关网络名词的详细说明,请参考TCP/IP协议相关内容

使用入门:

    下面是以一种最基本的方式来使用Iperf进行网络带宽的测量。

需要测试网络带宽的两台机器上分别复制一份Iperf,其中一台作为Server,一台作为Client

    Server端执行命令

iperf –s

此时,Server端的Iperf作为一个服务开始监听,等待Client端发过来的请求。默认监听端口5001,可以通过参数进行修改。

Client端执行命令

iperf -c 192.168.1.101  #这个IP地址即为Server端的IP地址

    下面是一个测试实例:

1)server端运行“iperf –s”,则会有下面的显示

2) 另外启动一命令行窗口,执行“>iperf -c localhost -t 10  -i 1

命令解释:与在localhostserver端进行测试,测试时间10s,每1s统计一次数据

在客户端显窗口显示的内容会如下。

此时,server端显示如下

   

 

    Jperf作为客户端进行测试时,结果如下。其最大的优点是方便控制,显示结果比较直观。

相关链接:

http://dast.nlanr.net/projects/Iperf/

http://sourceforge.net/projects/iperf/

两个好像都是Iperf的网站,不过在Sourceforge上的更新较快,版本较新,但是未提供windows下的可执行文件,仅提供源代码。第一个网站上提供了1.7版本的exe文件。但是Jperf版本较低。

原创粉丝点击