Linux服务器查看带宽使用情况,最直接的方法是使用iftop、nload、vnstat等命令行工具实时或定期监控网卡流量,同时结合sar和/proc/net/dev文件进行历史数据分析。
查带宽前先搞懂:你看到的数字到底代表什么
很多朋友一上来就敲命令,结果看到一堆网卡名和数字直接懵了,先花30秒理清基础概念,后面操作才不迷糊。
Linux服务器里带宽使用情况通常看两个维度:实时流量(当前每秒收发多少字节)和累计流量(某段时间总流量),系统自带的/proc/net/dev文件是所有监控工具的数据来源,它按网卡分别记录收包、发包、丢包、错误等计数器,你执行cat /proc/net/dev会看到类似这样的输出:
eth0: 123456789 987654 0 0 0 0 0 0 987654321 654321 0 0 0 0 0 0
左边是接收字节数和包数,右边是发送,但这个数字是从开机到现在的累计值,直接看意义不大,要算实际带宽,得间隔几秒读两次,用差值除以时间,所有监控工具本质上都在干这件事。
业内专家指出,云服务器厂商控制台显示的带宽监控,底层也是通过类似机制采集的,只是帮你做了可视化,所以你在服务器上自己测出的数据,和云厂商后台展示的会有细微差异,这属于正常现象。
linux服务器带宽监控命令有哪些
常用的命令分三类:实时交互式、定时采样式、流量统计式,下面按使用频率排序。
实时交互式:iftop和nload
iftop是带宽排查的标配工具,CentOS/RHEL系列用yum install iftop安装,Ubuntu/Debian系用apt install iftop,装好后直接执行iftop,界面顶部显示带宽刻度条,中间是各连接的IP和端口,底部汇总总流量,按T键可以切换显示总流量,按B键切换字节/比特显示,按P键暂停刷新。
iftop默认监听第一块网卡,多网卡机器用-i指定,比如iftop -i eth1,想过滤某个IP的流量,加-F 192.168.1.0/24参数,如果界面上看不到具体进程,只能看到IP和端口,这是正常的iftop只负责网络层,不关联进程。
nload更简单直观,直接显示进站和出站的实时流量图和数字,安装方式:yum install nload或apt install nload,执行后界面分成两半,左边是进站(Incoming),右边是出站(Outgoing),每半显示当前值、平均值、最小值、最大值,按和键切换网卡。
这两个命令适合临时登录服务器快速看一眼,但不适合长时间挂机监控,因为它们是全屏交互界面,占终端还费电。
定时采样式:sar
sysstat包里的sar命令是专业运维的必备利器,安装sysstat后,它会通过cron定时收集系统数据,包括网络流量,先确认服务在跑:systemctl status sysstat(老系统是service sysstat status)。
手动采样看当前带宽:
sar -n DEV 1 3
这条命令每秒采样一次网络数据,共采3次,输出里的rxkB/s和txkB/s就是每秒收发的千字节数。-n DEV表示统计网络设备,如果想看TCP/UDP连接状态,用-n TCP或-n UDP。
历史回溯是sar的强项,比如查看今天上午10点到11点的流量:
sar -n DEV -f /var/log/sysstat/sa$(date +%d) -s 10:00:00 -e 11:00:00
不同的发行版日志路径略有差异,CentOS在/var/log/sa/目录,Ubuntu在/var/log/sysstat/,这个能力特别适合回答”昨晚带宽跑满没”这种事后追查问题。
流量统计式:vnstat
vnstat不是实时监控,而是持续在后台记录流量,按小时、日、月汇总,安装后先初始化数据库:
vnstat -i eth0
然后启动守护进程(systemctl start vnstat),之后它就默默记录了,想看日流量排行,执行vnstat -d;看月流量排行,执行vnstat -m;看实时速率,执行vnstat -l(需要等待几秒采样)。
vnstat的最大价值在于长期趋势分析,比如你想知道这台服务器每个月流量是否接近带宽套餐上限,或者判断是否需要升级带宽,vnstat的月度报表比任何实时工具都管用。
带宽跑满时怎么快速定位是哪个进程
服务器带宽突然飙高,网站访问变慢,这时候光看总流量没用,得揪出元凶,按下面三步走。
第一步:确认总带宽确实跑满
用iftop或sar确认整体流量确实异常,如果iftop显示总流量只有几百KB/s,那网站慢的原因可能不在带宽,而是CPU、磁盘或者外部攻击,别急着甩锅给带宽。
第二步:用nethogs按进程排序
nethogs是唯一能直接显示进程名和PID的流量工具,安装:yum install nethogs或apt install nethogs,执行后界面列出每个进程的发送和接收速率,按M键可以在KB/s和KB/MB之间切换,看到某个进程(比如nginx或java)占用大量带宽,记下PID,再用ps -ef | grep PID查具体命令行。
nethogs需要root权限,而且对流量较小的短连接可能漏报,但对付带宽跑满这种大流量场景绰绰有余。
第三步:结合连接状态筛出异常IP
如果是恶意扫描或DDoS,流量通常来自大量陌生IP,用ss -antp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20列出连接数最多的前20个IP,正常业务连接数分布应该比较分散,如果某个IP独占几百个连接,基本可以判定有问题。
用防火墙临时封禁测试:
iptables -A INPUT -s 1.2.3.4 -j DROP
封完观察流量是否下降,注意别误封自己,云服务器上更推荐用安全组规则操作。
云服务器场景下的带宽查看与本地物理机有什么不同
云服务器(比如简米云、酷番云)用户经常困惑:我在服务器上看到网卡流量才50Mbps,为什么控制台显示带宽跑满了?这里有个关键区别:云平台的带宽计量点通常在虚拟机外部,而服务器内部看到的流量是经过虚拟化网卡后的数据。
部分云厂商的带宽计费包含出入方向流量总和,而iftop默认显示的是双向分开的数值,如果你只看了出站方向觉得不高,实际上入站加出站可能已经逼近峰值,行业共识认为,云服务器上应以控制台监控数据为准,服务器内部工具仅作参考。
云平台通常提供带宽包或按流量计费两种模式,按流量计费的服务器,带宽跑满意味着钱包在流血,建议开启云平台提供的“带宽超限告警”,配合vnstat做月度流量审计,避免月底账单吓人。
常见问题排查:为什么我测的带宽和实际不符
很多人用speedtest或wget下载文件测速,发现达不到购买的带宽值,这不一定是服务器问题,测速受本地网络环境和目标节点影响,跨运营商或跨国测速结果波动很大,磁盘I/O和CPU性能会限制下载速度,尤其机械硬盘跑不满千兆带宽,云服务器的带宽上限通常指公网出口,内网流量不计入,但如果你在内网传输大文件,iftop也会显示高流量,容易误判。
正确的测速姿势是:在服务器上使用curl -o /dev/null -w '%{speed_download}'下载一个大型测试文件,多次取平均值,或者直接看云监控里的“公网出方向带宽”指标,那个才是计费依据。
Q&A:关于linux服务器带宽查看的常见问题
有没有一条命令直接显示总带宽占用率?
没有,Linux不像Windows任务管理器那样有个“网络占用百分比”的圆圈,因为带宽大小取决于网卡速率和实际流量,你需要自行计算:先用ethtool eth0查看网卡速率(如10000Mb/s),再用sar或iftop看当前流量,两者相除得到占用率,部分工具如bmon会在界面底部显示百分比,但依赖正确的网卡速率配置。
为什么iftop显示的流量比云监控小?
云监控统计的是物理网卡入口流量,包含所有封装协议头(如VXLAN、GRE),而iftop默认解析并过滤了部分隧道协议和广播包,所以数值偏低,云平台可能将入方向流量限速在较低值,而出方向不限速,导致两边数据不对称,遇到这种情况,以云监控数据为准。
如何记录一周的带宽使用情况?
用vnstat最省事,安装后它会自动后台运行,无需额外配置,一周后执行vnstat -w查看最近7天的日流量柱状图,或者vnstat -m看月度汇总,如果想保留更多历史数据,确保vnstat的数据库所在分区有足够空间,默认数据很小,一年也就几MB,如果服务器重启频繁,记得设置systemctl enable vnstat让它在开机时自动启动。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/771987.html


