1. Linux实时网速监控的必要性与场景
在服务器运维和网络调试过程中,实时监控网络流量就像汽车仪表盘显示车速一样重要。当服务器出现响应缓慢、网络连接异常或带宽突增时,快速定位问题往往需要查看实时网速。不同于Windows系统有直观的任务管理器,Linux系统需要通过命令行工具来实现这一功能。
我管理过上百台Linux服务器,最常遇到的几种典型场景包括:
- 服务器带宽突然跑满导致服务不可用
- 排查异常网络连接(如挖矿病毒、异常外联)
- 评估网络传输性能(如文件同步、备份任务)
- 验证网络限速策略是否生效
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础工具ifconfig的流量查看方法
2.1 ifconfig基础使用
最传统的网卡流量查看方式是使用ifconfig命令。在终端直接输入:
bash复制ifconfig eth0
输出结果中重点关注这两个字段:
code复制RX packets 123456 bytes 78901234 (78.9 MB)
TX packets 654321 bytes 21098765 (21.0 MB)
注意:现代Linux发行版可能默认不安装ifconfig,属于net-tools套件,可通过
sudo apt install net-tools(Debian系)或sudo yum install net-tools(RHEL系)安装
2.2 ifconfig的局限性
在实际使用中发现ifconfig有几个明显缺陷:
- 只能显示累计流量,无法直接查看实时速率
- 部分虚拟网卡或新硬件可能显示不全
- 输出格式在不同发行版中略有差异
3. 实时流量监控方案对比
3.1 watch组合命令方案
通过watch命令可以实现准实时刷新:
bash复制watch -n 1 "ifconfig eth0 | grep bytes"
参数说明:
-n 1:每秒刷新一次grep bytes:只显示流量统计行
3.2 nload专业工具
更专业的方案是使用nload工具:
bash复制sudo apt install nload # Debian/Ubuntu
sudo yum install nload # CentOS/RHEL
使用效果:
- 分上下行显示实时速率曲线
- 自动适配单位(KB/s、MB/s)
- 支持多网卡切换查看
3.3 iftop流量分析
对于需要分析具体连接的场景,iftop更合适:
bash复制sudo apt install iftop
sudo iftop -i eth0
特色功能:
- 按连接显示流量排名
- 可显示源/目的IP和端口
- 支持过滤特定IP段
4. 实战:编写实时监控脚本
4.1 基础监控脚本
创建net_speed.sh:
bash复制#!/bin/bash
INTERVAL=1
IFACE="eth0"
while true; do
R1=$(cat /sys/class/net/$IFACE/statistics/rx_bytes)
T1=$(cat /sys/class/net/$IFACE/statistics/tx_bytes)
sleep $INTERVAL
R2=$(cat /sys/class/net/$IFACE/statistics/rx_bytes)
T2=$(cat /sys/class/net/$IFACE/statistics/tx_bytes)
RX=$(( (R2 - R1) / INTERVAL ))
TX=$(( (T2 - T1) / INTERVAL ))
echo "RX: $(numfmt --to=iec $RX)B/s TX: $(numfmt --to=iec $TX)B/s"
done
4.2 脚本增强版
添加网卡选择和单位转换:
bash复制#!/bin/bash
INTERVAL=${1:-1}
IFACE=${2:-eth0}
humanize() {
local B=$1
if [ $B -gt 1073741824 ]; then
printf "%4.1f GiB/s" $(echo "$B/1073741824" | bc -l)
elif [ $B -gt 1048576 ]; then
printf "%4.1f MiB/s" $(echo "$B/1048576" | bc -l)
elif [ $B -gt 1024 ]; then
printf "%4.1f KiB/s" $(echo "$B/1024" | bc -l)
else
printf "%4d B/s" $B
fi
}
while true; do
R1=$(cat /sys/class/net/$IFACE/statistics/rx_bytes)
T1=$(cat /sys/class/net/$IFACE/statistics/tx_bytes)
sleep $INTERVAL
R2=$(cat /sys/class/net/$IFACE/statistics/rx_bytes)
T2=$(cat /sys/class/net/$IFACE/statistics/tx_bytes)
RX=$(( (R2 - R1) / INTERVAL ))
TX=$(( (T2 - T1) / INTERVAL ))
printf "\rRX: %-15s TX: %-15s" "$(humanize $RX)" "$(humanize $TX)"
done
5. 生产环境监控方案
5.1 Prometheus + Grafana方案
在企业级环境中,推荐使用:
- 安装node_exporter采集基础指标
- 配置Prometheus抓取数据
- Grafana创建监控看板
关键指标:
- node_network_receive_bytes_total
- node_network_transmit_bytes_total
5.2 使用vnStat长期统计
安装配置:
bash复制sudo apt install vnstat
sudo vnstat -u -i eth0
sudo systemctl enable vnstat
查看日报表:
bash复制vnstat -d
6. 常见问题排查指南
6.1 网卡不显示流量
可能原因:
- 网卡名称不对(使用
ip link确认) - 驱动未正确加载(检查
dmesg | grep eth) - 网卡未激活(
sudo ip link set eth0 up)
6.2 流量统计不准
解决方案:
- 检查是否启用了offload功能:
bash复制
ethtool -k eth0 | grep offload - 临时关闭offload:
bash复制sudo ethtool -K eth0 gro off lro off
6.3 监控脚本CPU占用高
优化建议:
- 适当降低采样频率(如改为2秒)
- 使用更高效的工具(如nload)
- 避免在脚本中使用管道和复杂计算
7. 高级技巧与扩展应用
7.1 按进程统计流量
使用nethogs:
bash复制sudo nethogs eth0
7.2 流量过滤统计
使用tcptrack:
bash复制sudo tcptrack -i eth0 port 80
7.3 云端服务器监控
AWS/Aliyun等云平台:
- 使用云监控服务
- 通过API获取流量数据
- 注意云厂商的流量计量方式可能不同
我在实际运维中发现,结合多种工具使用效果最佳。例如用nload看实时趋势,用iftop分析异常连接,再用vnStat做长期统计。当网络出现问题时,第一时间查看实时流量往往能快速定位问题方向
