服务器网速怎么测试?,查看服务器网速脚本有哪些

一套由bash脚本+多项网络工具组合构成的测速方案,能快速定位服务器入站/出站带宽、延迟、丢包等核心指标,覆盖“即时测速”与“持续监控”两种场景。

服务器网速是衡量服务质量的底线指标,网站打开慢、视频缓存卡、下载进不去进度条,根因往往不在应用程序,而在网络链路本身,登录服务器敲几条命令就能看到结果,但不同的工具、不同的参数、不同时间段的测试,得出来的数据往往差异很大,这也是为什么一套标准化的查看网速脚本,能让运维效率翻倍,下面这套脚本逻辑,不需要安装重型监控系统,单台服务器也能跑出相对准确的结果。

查看服务器网速前,先明确你要测什么

很多人上来就执行speedtest-cli,等结果出来后只知道一个下载速度数字,然后发现第二天线上又卡了,再测一遍数据又完全不同,这是因为“查看网速”本身是一个笼统的概念,它其实涵盖了带宽、延迟、抖动、丢包、吞吐量、并发连接数等多个维度,写脚本前,先明确自己到底要看哪一层的网速,否则测出来的数据不具备决策价值。

单机带宽测试:适合判断服务器的出口能力

单机带宽测试常用来回答一个问题:服务器当前能跑多大的带宽量,对于网站站长来说,这直接决定了用户下载文件、访问大图、播放视频的体验,测试方法是让服务器与一个外部节点建立高速传输通道,观察传输速率。

比较常用的是speedtest-cli,基于Speedtest.net的节点库,安装很简单,Python环境下一行命令搞定:

pip install speedtest-cli

但要注意,Speedtest.net的节点在不同省份、不同运营商下,给出的测速结果波动很大,建议脚本里手动指定多个省份的节点ID,比如华北、华东、华南各取一个,然后取平均值,而不是默认自动选节点,这样得到的数据更接近真实用户体验。

延迟与丢包测试:判断链路质量的核心指标

延迟和丢包比带宽更能反映服务器当下的网络健康状况,一个带宽是100Mbps但丢包率3%的服务器,实际体验可能不如一个50Mbps但零丢包的服务器。

脚本里可以用ping命令对不同目标IP跑一轮测试,例如对同一省份的电信、联通、移动三个IP各发20个ICMP包,然后计算平均RTT和丢包率,如果延迟超过80ms,丢包超过1%,就要引起警觉,这通常说明国际链路或跨网互联出了问题。

持续吞吐监控:判断服务器网速是否被抢占或限速

还有一种非常常见的情况:服务器网络本身没问题,但被某些进程吃满了带宽,比如网站被人刷流量、日志同步任务占用大量I/O带宽、挖矿木马在后台频繁通信等,这时单次测速无法反映问题,需要的是持续监控。

iftop命令可以实时展示每个连接的带宽占用,但默认状态下不会自动刷新并记录日志,脚本里需要配合batch模式和定时任务,才能形成一套可以回溯的监控数据。

核心脚本一:综合网速检测脚本

下面是一套可以直接复制到服务器上执行的bash脚本,覆盖了“带宽+延迟+丢包+连接状态”四类核心数据,脚本设计的思路是把多条命令组合在一起,输出一份结构清晰的报告,省去手动逐条执行的繁琐。

#!/bin/bash
# 服务器网速一键检测脚本
# 适用环境:CentOS 7+/Ubuntu 18.04+/Debian 10+

echo "========== 服务器基础网络信息 ==========" curl -s ipinfo.io | grep -E "ip|city|region|country|org" echo ""

echo "========== 三项延迟测试(本地网关 / 省级DNS / 跨省IP) ==========" ping -c 20 -q 192.168.1.1 | tail -1 ping -c 20 -q 223.5.5.5 | tail -1 ping -c 20 -q 180.101.50.242 | tail -1 echo ""

服务器网速怎么测试?,查看服务器网速脚本有哪些

echo "========== 入站/出站带宽测试(本地Speedtest节点) ==========" speedtest-cli --server=5481 --timeout=10 echo ""

echo "========== 当前TCP连接数TOP10 IP ==========" ss -tn state established | awk '{print $4}' | cut -d':' -f1 | sort | uniq -c | sort -nr | head -10 echo ""

echo "========== 实时流量速率峰值(10秒采样) ==========" ifstat -i eth0 1 10 | awk 'NR>2 {print $1, "入站:"$2, "出站:"$3}' echo ""

echo "========== 占用带宽最大的Top5进程 ==========" nethogs -t -c 3 | head -20

这段脚本看似基础,但每一条命令都有它的实际目的。

为什么选择这三个ping目标

168.1.1是本地网关,测的是服务器到路由器这一段的内网质量,如果这里就丢包或延迟过大,说明内网环境出了问题,223.5.5.5是阿里公共DNS,测的是服务器到互联网骨干节点的质量,180.101.50.242是百度公共DNS,测的是跨运营商的互联质量,三个层次的数据组合起来,能快速区分故障点。

nethogs命令的安装与执行细节

nethogs并不是系统自带命令,CentOS下需要安装epel-release仓库,Ubuntu下直接apt-get install nethogs就可以,不加参数直接运行时,它会显示每个进程的实时收发流量,按键盘M键可以切换显示单位,从kB/s到B/s再到MB/s,对排查“某个进程吃满带宽”的问题非常直观。

speedtest-cli指定节点的必要性

默认不指定节点时,speedtest-cli会自动选择延迟最低的服务器,但这样的结果往往会掩盖跨网问题,比如一台部署在河南的BGP多线服务器,自动选节点可能始终选到同一运营商的测试点,测出来的结果都很好,但用户从其他运营商访问时依然很慢,指定不同区域的节点ID逐一测试,才能还原真实访问场景。

核心脚本二:后台持续监控带宽脚本

即时测速解决的是“现在网速多少”的问题,但运维场景中更常遇到的是“昨晚网速是不是异常了”,这类问题需要持续采集数据,形成时间线后与故障时间对表。

#!/bin/bash
# 带宽与连接数持续采集脚本,配合crontab每5分钟执行一次
# 输出结果保存到 /var/log/net_monitor.log

DATE=$(date "+%Y-%m-%d %H:%M:%S")

记录带宽使用情况(字节数累加,计算5分钟平均速率)

RX1=$(cat /proc/net/dev | grep eth0 | awk '{print $2}') TX1=$(cat /proc/net/dev | grep eth0 | awk '{print $10}') sleep 300 RX2=$(cat /proc/net/dev | grep eth0 | awk '{print $2}') TX2=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')

RX_RATE=$(( (RX2 - RX1) / 300 )) TX_RATE=$(( (TX2 - TX1) / 300 ))

记录TCP连接数

TCP_COUNT=$(ss -tn state established | wc -l)

echo "$DATE | 入站: $(($RX_RATE / 1024)) KB/s | 出站: $(($TX_RATE / 1024)) KB/s | TCP连接数: $TCP_COUNT" >> /var/log/net_monitor.log

网友评论

猜你喜欢