51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

[原创]Linux服务器出入口网络带宽速率测速Shell脚本

概述

用于计算服务器出入口实际带宽速率,用于统计服务器网络测速统计。

脚本功能

该脚本会根据当前服务器内存剩余空间判断生成约为1.5G临时文件,并提交至指定的url地址进行出口带宽占用。通过检查默认出入口网卡流量数值来判断出入口带宽网络速率。

执行效果

本脚本不适宜在生产或已部署服务的服务器上运行,可能会因CPU&内存占用过高导致其他服务被系统杀死

[root@cloud-node1 ~]# bash test.sh
当前默认网卡 ens32 上行测速将开始,等待10s...
当前默认网卡 ens32 下行测速将开始,等待10s...
当前默认网卡 ens32 物理速率为: 1000Mb/s ,实际测试流量下行速率约为: 917 Mbps/s,上行速率约为: 98 Mbps/s
当前默认网卡 ens32 物理速率为: 1000Mb/s ,实际测试流量下行格式化速率约为: 114.74 MB/s,出口流量格式化速率约为: 12.29 MB/s
脚本内容
#!/bin/bash
# 服务器出入口网络带宽速率计算
# Author: lolicp.com
# Date: 2023-03-31
# Version: 0.0.4
# Description: 该脚本用于服务器外网出入口网络速率测速

set +m


检查是否有测速请求进程未完成
==============



ps -o pid,command\|awk '/Speed_Test_File\[\[:space:\]\]/ {print $1}'\|xargs -i kill {} 2\> /dev/null


默认流量出口网卡
========



Default_Network_Device_Name=`route -n|awk '/^0.0.0.0/ {print $8}' |uniq`


临时测速文件
======



Temp_Speed_File="/dev/shm/Speed_Test_File"
if \[ ! -f "${Temp_Speed_File}" \];then
# 剩余内存计算
Free_Mem_Info=`awk -F":[[:space:]]" '/^MemFree:/ {print $2}' /proc/meminfo |awk '{printf "%.0F",$1/1024}'`
if \[ "${Free_Mem_Info}" -gt 2048 \];then
Temp_Speed_Size='2000000'
else
Temp_Speed_Size='1563000'
fi
echo "开始生成 $((${Temp_Speed_Size}/1024))M 的临时文件:${Temp_Speed_File}"
# 生成临时测速文件
dd if=/dev/zero of=${Temp_Speed_File} bs=1024 count=${Temp_Speed_Size} \&\> /dev/null
fi


获取物理网卡速率
========



Network_Device_Speed=`route -n|awk '/^0.0.0.0/{print $8}'|uniq |xargs -i ethtool {} 2>/dev/null|awk '/Speed/ {print $2}'`
if \[ "${Network_Device_Speed}" = '100Mb/s' \];then
Network_Conf_Speed='2'
elif \[ "${Network_Device_Speed}" = '1000Mb/s' \];then
Network_Conf_Speed='10'
elif \[ "${Network_Device_Speed}" = '10000Mb/s' \];then
Network_Conf_Speed='20'
elif \[ "${Network_Device_Speed}" = '20000Mb/s' \];then
Network_Conf_Speed='30'
elif \[ "${Network_Device_Speed}" = '25000Mb/s' \];then
Network_Conf_Speed='40'
else
Network_Device_Speed='100Mb/s(虚拟机)'
Network_Conf_Speed='2'
fi


上传测速地址Url
=========



Upload_Speed_Url_List=('https://www.baidu.com/speed' 'https://www.aliyun.com/speed' 'https://ecloud.10086.cn/speed' 'https://www.ctyun.cn/speed' 'https://cucc.wocloud.cn/speed' 'https://lol.qq.com/speed' 'https://daoju.qq.com/speed' 'https://pay.qq.com/speed' 'https://www.migu.cn/speed')
for num in $(seq 1 "${Network_Conf_Speed}");do
for Upload_Speed_Url in ${Upload_Speed_Url_List\[@\]};do
(curl -s --interface "${Default_Network_Device_Name}" -F "data=@${Temp_Speed_File}" "${Upload_Speed_Url}" \&\> /dev/null \&)
done \&
done \&
sleep 4
echo "当前默认网卡 ${Default_Network_Device_Name} 上行测速将开始,等待10s..."


历史出口流量
======



Old_Network_Outlet_Flow_Sum=`awk '{print $1}' /sys/class/net/${Default_Network_Device_Name}/statistics/tx_bytes`
sleep 10


最新新出口流量
=======



New_Network_Outlet_Flow_Sum=`awk '{print $1}' /sys/class/net/${Default_Network_Device_Name}/statistics/tx_bytes`


网卡出口流量字节速率
==========



Network_Outlet_Flow_Sum=`echo |awk "{printf \"%f\", (${New_Network_Outlet_Flow_Sum}-${Old_Network_Outlet_Flow_Sum})/10}"`


网卡出口流量比特速率
==========



Network_Outlet_Flow_Sum_D=`echo |awk "{printf \"%f\",(${New_Network_Outlet_Flow_Sum}-${Old_Network_Outlet_Flow_Sum})*8/10}"`


标准出口比特速率
========



Network_Outlet_Device_Flow_Sum_D=`echo|awk "{printf \"%f\",${Network_Outlet_Flow_Sum_D/.*}/1024/1024}"`


标准出口字节速率
========



Network_Outlet_Device_Flow_Sum=`echo|awk "{printf \"%.2f\",${Network_Outlet_Flow_Sum/.*}/1024/1024}"`


清理未完成进程
=======



ps -o pid,command\|awk '/Speed_Test_File\[\[:space:\]\]/ {print $1}'\|xargs -i kill -9 {} 2\> /dev/null
if \[ -z "${1}" \];then
rm -f "${Temp_Speed_File}"
fi


下载测速地址Url
=========



Download_Speed_Url_List=('https://speed.cloudflare.com/__down?bytes=150000000' 'https://mirrors.cloud.tencent.com/OpenBSD/7.3/packages/amd64/unknown-horizons-2019.1p1.tgz' 'https://mirrors.tuna.tsinghua.edu.cn/OpenBSD/7.3/packages/amd64/unknown-horizons-2019.1p1.tgz' 'https://mirrors.aliyun.com/centos/7/os/x86_64/LiveOS/squashfs.img' 'https://mirrors.163.com/ubuntu/dists/kinetic/Contents-amd64.gz' 'http://mirrors.sohu.com/ubuntu/dists/kinetic/Contents-amd64.gz' 'https://mirrors.aliyun.com/ubuntu/dists/kinetic/Contents-amd64.gz' )


下载速率
====



for num in $(seq 1 "${Network_Conf_Speed}");do
for Download_Speed_Url in ${Download_Speed_Url_List\[@\]};do
(wget -q --no-check-certificate --dns-timeout=5 --connect-timeout=3 -O /dev/null -U 'Speed_Test_Query' "${Download_Speed_Url}" \&\> /dev/null \&)
done \&
done \&
sleep 4
echo "当前默认网卡 ${Default_Network_Device_Name} 下行测速将开始,等待10s..."
Old_Network_Ingress_Flow_Sum=`awk '{print $1}' /sys/class/net/${Default_Network_Device_Name}/statistics/rx_bytes`
sleep 10
New_Network_Ingress_Flow_Sum=`awk '{print $1}' /sys/class/net/${Default_Network_Device_Name}/statistics/rx_bytes`


网卡入口流量字节速率
==========



Network_Ingress_Flow_Sum=`echo |awk "{printf \"%f\",(${New_Network_Ingress_Flow_Sum}-${Old_Network_Ingress_Flow_Sum})/10}"`


网卡入口流量比特速率
==========



Network_Ingress_Flow_Sum_D=`echo |awk "{printf \"%f\",(${New_Network_Ingress_Flow_Sum}-${Old_Network_Ingress_Flow_Sum})*8}"`


标准入口比特速率
========



Network_Ingress_Device_Flow_Sum_D=`echo|awk "{printf \"%f\",${Network_Ingress_Flow_Sum_D/.*}/10485760}"`


标准入口字节速率
========



Network_Ingress_Device_Flow_Sum=`echo|awk "{printf \"%.2f\",${Network_Ingress_Flow_Sum/.*}/1024/1024}"`
ps -o pid,command\|awk '/Speed_Test_Query\[\[:space:\]\]/ {print $1}'\|xargs -i kill -9 {} 2\> /dev/null


标准网络速率
======



Network_Outlet_Device_Flow_Type="Mbps"


标准硬盘速率
======


`Network_Outlet_Device_Flow_Type_D="MB"
echo "当前默认网卡 ${Default_Network_Device_Name} 物理速率为: ${Network_Device_Speed} ,实际测试流量下行速率约为: ${Network_Ingress_Device_Flow_Sum_D/.`} ${Network_Outlet_Device_Flow_Type}/s,上行速率约为: ${Network_Outlet_Device_Flow_Sum_D/.`} ${Network_Outlet_Device_Flow_Type}/s"
echo "当前默认网卡 ${Default_Network_Device_Name} 物理速率为: ${Network_Device_Speed} ,实际测试流量下行格式化速率约为: ${Network_Ingress_Device_Flow_Sum} ${Network_Outlet_Device_Flow_Type_D}/s,出口流量格式化速率约为: ${Network_Outlet_Device_Flow_Sum} ${Network_Outlet_Device_Flow_Type_D}/s"`

赞(0)
未经允许不得转载:工具盒子 » [原创]Linux服务器出入口网络带宽速率测速Shell脚本