作者:邓卫华 http://dengweihua1.blog.51cto.com

2010.9.28

近段时间准备XX集团数据中心准备迁移到专用的数据中心公司为集团提供更好的公共服务及互联网速度。期间需要对各家公司测试与我集团各公司之间的网络带宽性能。因为我这边刚才有一台LINUX服务器暂时未使用我就直接写了一个SHELL脚本来实现,但是因为各分公司无LINUX的条件所以还得在WINDOWS也能实现流量收集。

设计思路:

1、 windows通过性能计数器每秒收集一次网络数据。写一批处理文件,实现循环文件FTP上传,并在批处理中启动或停止“性能计数器”。

2、 LINUX: 写二个脚本,一个脚本每秒收收集一次网卡数据并写入文件,另一脚本实现FTP功能自动上传/下载。

最后完成的报告如下:

clip_p_w_picpath002

作者:邓卫华 http://dengweihua1.blog.51cto.com

 

第一部份:windows

一、开始、运行,输入“perfmon”打开性能计数器。

clip_p_w_picpath004

二、增加计数器

1、增加数据收集器集,注意收集器的名字,以后面的处理处会用到。

clip_p_w_picpath006

2、增加网络流量的计数器:进入用户定义,在系统监视器日志点点名键。

clip_p_w_picpath008

选择“Network Interface->Bytes Total/sec”,选定对像的实例处选择你的实际网卡。点“添加”

clip_p_w_picpath010

作者:邓卫华 http://dengweihua1.blog.51cto.com

3、设置收集间格时间为1s一次。文件格式为cvs.

三、完成批处理自动循环上传FTP数据。

批处理循环10次上传文件到FTP,在上传之前会自动启动“计数器收集器集”,完成后自动停止“计数器收集器集”,注意第二次启动测试之前一定要删除或移走之前生成的性能数据,或设置文件名生成规则。

@echo off

echo open your.ftpserver.com>ftp.txt

echo ftp-account>>ftp.txt

echo ftp-password>>ftp.txt

echo send g:\tddownload\test.rar 06.rar >>ftp.txt

echo bye>>ftp.txt

logman start "新的数据收集器集"

for /L %%a in (1,1,10) do ftp -i -s:c:\users\dengwh\desktop\ftp.txt

logman stop "新的数据收集器集"

作者:邓卫华 http://dengweihua1.blog.51cto.com

四、处理收集到的数据。

数据处理过程

clip_p_w_picpath012

作者:邓卫华 http://dengweihua1.blog.51cto.com

第二部份LINUX:

收集流量数据并写入文件的脚本:

[root@mail-bk ~]# cat test_bandwidth/test_bandwidth.sh

#!/bin/sh

OUTPUTFILE=bandw.txt

TAB='\t'

LINE=""

if [ -n "$1" ]; then

eth_name=$1

else

eth_name="eth0"

fi

i=0

send_o=`ifconfig $eth_name | grep bytes | awk '{print $6}' | awk -F : '{print $2}'`

recv_o=`ifconfig $eth_name | grep bytes | awk '{print $2}' | awk -F : '{print $2}'`

send_n=$send_o

recv_n=$recv_o

echo -e "Time $TAB SendRate $TAB RecvRate $TAB TotalRate $TAB avgsend $TAB avgrecv $TAB avgtotal"> $OUTPUTFILE

while [ 1 ]; do

send_l=$send_n

recv_l=$recv_n

sleep 1

send_n=`ifconfig $eth_name | grep bytes | awk '{print $6}' | awk -F : '{print $2}'`

recv_n=`ifconfig $eth_name | grep bytes | awk '{print $2}' | awk -F : '{print $2}'`

i=`expr $i + 1`

send_r=`expr $send_n - $send_l`

recv_r=`expr $recv_n - $recv_l`

total_r=`expr $send_r + $recv_r`

send_ra=`expr \( $send_n - $send_o \) / $i`

recv_ra=`expr \( $recv_n - $recv_o \) / $i`

total_ra=`expr $send_ra + $recv_ra`

sendn=`ifconfig $eth_name | grep bytes | awk -F \( '{print $3}' | awk -F \) '{print $1}'`

recvn=`ifconfig $eth_name | grep bytes | awk -F \( '{print $2}' | awk -F \) '{print $1}'`

echo -e `date +%T` $TAB $send_r $TAB $recv_r $TAB $total_r $TAB $send_ra $TAB $recv_ra $TAB $total_ra >> $OUTPUTFILE

clear

echo "=================================================="

echo "Last second : Send rate: $send_r Bytes/sec Recv rate: $recv_r Bytes/sec Total rate: $total_r Bytes/sec"

echo "Average value: Send rate: $send_ra Bytes/sec Recv rate: $recv_ra Bytes/sec Total rate: $total_ra Bytes/sec"

# echo "Total traffic after startup: Send traffic: $sendn Recv traffic: $recvn"

echo "=================================================="

done

[root@mail-bk ~]#

作者:邓卫华 http://dengweihua1.blog.51cto.com

2、 FTP自动上传/下载文件的脚本

[root@mail-bk ~]# cat test_bandwidth/test_ftp.sh

#!/bin/sh

i=1

LOGFILE=bandw.txt

ACTIVE=$1

if [ -z $ACTIVE ]; then

echo "usage ./test_ftp.sh [put or get]"

exit 1

fi

#SERVER=58.64.131.68

#USERNAME=nwttest3

#PASSWORD=BesT70Cr

SERVER=ftp.server.address

USERNAME=your.ftp.account

PASSWORD=your.ftp.password

while [ $i -le 10 ]; do

echo $LOGFILE$i.txt

sleep 10

echo ">>>>>>>>>>>>>>>FTP START: the $i >>>>>>>>>>>" >> $LOGFILE

ftp -n $SERVER <&lt;END

user $USERNAME $PASSWORD

lcd /data/testdata

binary

verbose

$ACTIVE 07.rar

close

quit

END

echo ">&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;FTP END&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;" &gt;&gt; $LOGFILE

i=`expr $i + 1`

done

作者:邓卫华 http://dengweihua1.blog.51cto.com