判断网卡流量异常需先获取可靠数值再比对业务阈值:用nload取瞬时速率、sar取10秒均值、pidstat查高流量进程,阈值须依网卡带宽实际设定。

直接用命令判断网卡流量是否异常,关键不是“写if语句”,而是先获取可靠数值,再和合理阈值比对。Linux本身不内置“流量异常”定义,需你根据业务设定标准——比如单网卡持续超过80MB/s(≈640Mbps)就告警,或相比基线突增3倍。
用nload抓当前瞬时速率做简单判断
nload轻量、响应快,适合脚本中快速取值:
- 执行nload -u M -t 1000 eth0 | grep "Curr:",能提取类似Curr: 42.33 MBit/s的输出
- 配合awk和bc提取纯数字并比对:
curr=$(nload -u M -t 1000 eth0 2>/dev/null | grep "Curr:" | awk '{print $2}' | tr -d 'MBit/s') ; [ $(echo "$curr > 80" | bc -l) -eq 1 ] && echo "异常" - 注意:nload需提前安装;-t 1000表示1秒采样一次,避免卡顿;务必加2>/dev/null屏蔽错误输出,否则管道失败
用sar查历史平均值,识别偏离基线
单次瞬时值易受抖动干扰,用sar看过去10秒均值更稳:
- 运行sar -n DEV 1 10 | awk '/eth0/ {rx+=$5; tx+=$6} END {print (rx+tx)/10}',得到10秒内每秒收发总字节数的平均值(单位KB/s)
- 若结果超过100000(即约100MB/s),可视为异常:
avg=$(sar -n DEV 1 10 2>/dev/null | awk '/eth0/ {rx+=$5; tx+=$6} END {printf \"%.0f\", (rx+tx)/10}') ; [ "$avg" -gt 100000 ] && echo "流量偏高" - 该方法依赖sysstat包,CentOS用yum install sysstat,Ubuntu用apt install sysstat
结合进程级数据,避免误判
流量高≠异常,可能是备份或大文件下载。建议加一层验证:确认是否有非预期进程在发包:
- 用pidstat -n 1 3 | awk '$7+$8 > 50000 {print $1,$2,$7,$8}'筛选出3秒内收发合计超50MB/s的进程($7是kB_rd/s,$8是kB_wr/s)
- 若输出含minerd、java(无业务关联)、或陌生PID,基本可定性为异常
- 此步无需额外安装,pidstat属于sysstat套件,和sar共用同一依赖
不复杂但容易忽略:阈值必须贴合实际。千兆网卡满载约125MB/s,跑满90%就该预警;而万兆卡下100MB/s只是毛毛雨。别照搬别人数字,先用ifstat 5观察几天正常波动范围再设线。











