查看虚拟机实时带宽最直接的方法是登录系统后用nload或iftop命令,一条命令就能看到当前进出的实际流量;如果你不想进系统,云平台控制台自带监控图表也能看个大概,但会有几分钟延迟。
下面这套排查思路,能让你在两分钟内找到准确答案。
为什么你查到的带宽数字总是不准?
很多人第一反应是打开任务管理器或者云平台控制台,结果发现数字跳来跳去,和自己体感完全对不上。
问题出在监控链路的不同。 控制台上显示的是虚拟化层统计的网卡吞吐量,它统计的是物理网卡上的流量,而你在系统里用工具看到的,是虚拟机内网卡实际处理的数据量,两边的统计口径不同,所以数字有差异是正常的。
如果你需要精确到秒级的实时数据,必须进入虚拟机系统内部查看。
虚拟机实时带宽监控工具有哪些
业内专家指出,Linux下最常用的实时带宽工具就三款:nload、iftop和bmon。 这三款工具安装简单,输出直观,适合绝大多数运维场景。
nload:最直观的仪表盘式显示
nload用字符画出一个实时刷新的仪表盘,左边是流入,右边是流出,下方还会显示峰值、平均值和最小值。
安装命令:
- CentOS/RHEL:
yum install -y nload - Ubuntu/Debian:
apt install -y nload
装好后直接输入nload,默认显示第一块网卡的数据,如果你有多块网卡,可以指定查看某一块:
nload eth0
屏幕上会同时显示当前流量、平均流量、最小流量和最大流量,单位默认是Mbps,也可以用-u参数改成KB/s或MB/s:
nload -u M
iftop:类top风格的连接级流量排行
iftop的界面类似top命令,但它展示的是每个连接的实时带宽占用,这个工具最大的价值在于,它能告诉你哪台机器、哪个端口在消耗带宽。
安装命令:
- CentOS/RHEL:
yum install -y iftop - Ubuntu/Debian:
apt install -y iftop
运行:
iftop -i eth0
界面左上角显示的是最近2秒、10秒、40秒的平均流量,下方是每个连接的IP和端口,带宽数字会实时跳动,按T键可以切换显示格式,按P键暂停刷新,方便你截图记录。
bmon:带历史曲线图
bmon的优势在于界面底部有一条实时滚动的带宽曲线图,能直观看到流量波动趋势。
安装:
yum install -y bmon
apt install -y bmon
运行bmon -p eth0,按d键可以调出详细的每秒数据。
云平台控制台怎么查虚拟机当前带宽
如果你用的是简米云、酷番云或华为云的虚拟机,控制台自带的监控图表是最省事的方式。
简米云ECS
进入ECS实例详情页,点击“监控”标签页,默认展示的是CPU使用率、网络流入带宽和网络流出带宽三个核心指标,图表默认是1小时视图,你可以把时间范围缩到15分钟或1小时,刷新频率大约是1分钟一次。
需要留意的是,控制台图表有1-2分钟的数据延迟,不是严格意义上的“实时”,如果你需要秒级数据,建议使用云监控插件,安装后能实现15秒级别的采集精度。
酷番云CVM
酷番云的路径是:控制台 -> 云服务器 -> 实例 -> 监控,默认展示“网络带宽”图表,同样支持自定义时间范围,酷番云还有一个“流量包”页面,可以查看本月已用流量,但那是累计值,不是实时带宽。
用API或CLI查实时数据
如果你有多台虚拟机需要批量查看带宽,可以用云平台的API接口拉取监控数据,以简米云为例,调用DescribeInstanceMonitorData接口可以获取到每隔1分钟或15秒的带宽采样数据,适合写脚本做告警。
怎样判断虚拟机带宽是否跑满
运行了上面提到的工具后,看到数字只是第一步,关键是要判断当前带宽是否成为瓶颈。
先看网卡速率上限
用ethtool eth0查看网卡协商速率,比如输出显示Speed: 1000Mb/s,说明网卡是千兆口,理论最大带宽约125MB/s,如果你用nload看到带宽长期维持在110MB/s以上,说明基本跑满了。
另一种方式是查看/proc/net/dev文件,里面的rx_bytes和tx_bytes字段记录了累计流量,你可以手动计算差值:
cat /proc/net/dev
间隔10秒再执行一次,用差值除以时间,就能得到平均速率。
确认带宽瓶颈在哪个方向
- 流入带宽跑满:通常是有大量下载任务,或者被入侵后成为肉鸡被DDoS攻击。
- 流出带宽跑满:最常见的原因是网站被频繁爬取、视频文件被大量下载,或者数据库备份上传到对象存储。
实践中遇到过这样一个场景:某台虚拟机带宽持续跑满,用iftop查到是一个陌生IP在大量下载服务器上的压缩包。最后确认是业务方把备份文件放在web目录下,被人发现后疯狂拉取。 这种问题不进入系统看连接级数据,根本没法定位。
Windows虚拟机怎么查看实时带宽
Windows系统的查看方式相对简单一些。
任务管理器自带功能
Windows 10/11和Windows Server 2016以上版本,打开任务管理器->性能选项卡,点击“以太网”或“WLAN”,右下角会显示实时速率折线图,这个图表默认显示最近60秒的流量,每秒刷新一次,足够日常使用。
资源监视器
按Win+R输入resmon打开资源监视器,切换到“网络”选项卡,可以看到每个进程的实时带宽占用,这个功能非常实用,能直接找出是哪个程序在跑流量,列表里有“发送”和“接收”两列,点击列头可以按流量大小排序。
第三方小工具
如果你需要更精细的数据,可以临时下载TrafficMonitor这类便携工具,免安装,直接显示在任务栏上,不过这类工具依赖性能计数器,对系统版本有一定要求,建议在测试环境先验证。
临时查看和持续监控怎么选
不同的场景需要不同的工具,选错了往往事倍功半。
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 临时登录看一眼 | nload | 启动快,界面直观,无需配置 |
| 排查哪个IP占带宽 | iftop | 能看到连接级数据 |
| 长时间后台记录 | nload + 重定向 | 可输出到文件用于事后分析 |
| 云平台统一监控 | 控制台监控图表 | 免登录,支持告警 |
需要长时间记录带宽的朋友,可以用下面的命令把nload的输出重定向到文件:
nload eth0 -t 1000 > /tmp/bandwidth_$(date +%Y%m%d).log 2>&1 &
这样后台会持续记录数据,每1000毫秒采样一次,日志存在/tmp目录下。
带宽数据的单位陷阱
新手经常在这里翻车。带宽的常用单位是Mbps(兆比特每秒),而文件大小常用MB(兆字节)单位。 1字节等于8比特,所以100Mbps理论下载速度只有12.5MB/s。
如果你在nload里看到当前流量是80Mbps,实际下载文件的速度大约在10MB/s左右。判断是否跑满带宽前,先确认单位是Mbps还是MB/s,否则容易产生误判。
常见问题解答
虚拟机带宽监控工具哪个最准?
准确度最高的永远是网卡计数器,即/proc/net/dev里的累计值。 nload和iftop也是读取这个计数器的数值做差值计算,所以三者数据基本一致,云平台控制台的监控数据来自宿主机虚拟化层,由于统计点不同,数值会比系统内看到的略低或略高,属于正常现象。
为什么控制台显示带宽很低,但系统内部显示很高?
统计路径不同导致的。 云平台控制台统计的是虚拟网卡在宿主机上的流量,如果虚拟机的网卡有队列或卸载功能,部分数据包可能在内部处理时没有计入宿主机统计口径,控制台监控数据有2-3分钟的聚合延迟,短时间内的高峰流量会被平均掉。以系统内工具显示的数据为准,控制台数据参考趋势即可。
带宽经常跑满,需要升级配置吗?
先定位再升级,不要盲目加带宽。 用iftop查看是哪个IP或端口在消耗流量,如果是业务正常访问,说明带宽确实不够用;如果是异常连接,先检查是否被入侵或者爬虫抓取,多数情况下,通过限制单IP带宽或优化业务逻辑就能解决问题,不一定要花钱升级配置,根据以往经验,超过半数的“带宽跑满”问题靠调整即可解决,真正需要升级配置的不足四成。