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"


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