iostat -x 1 是查看真实磁盘吞吐的唯一可靠方式,因其 rMB/s、wMB/s 绕过 page cache 直接反映块设备速率,r_ios、w_ios 为驱动层真实 I/O 次数,而普通 iostat 的 rkB/s、wkB/s 和 r/s、w/s 受缓存合并及调度干扰严重失真。

直接看真实吞吐率,必须分清「磁盘」和「网络」两个维度,不能混用命令,也不能信默认输出。
iostat -x 1 是唯一能看真实磁盘吞吐的方式
iostat 不加 -x 的输出全是干扰项:
- rkB/s 和 wkB/s 是 VFS 层统计值,大量命中 page cache 后虚高,跟 SSD 厂商标称带宽对不上
- r/s 和 w/s 被请求合并、延迟下发、多路径重排扭曲,根本不能当 IOPS 用
只有 iostat -x 1 输出的以下字段才是设备级真实数据:
-
rMB/s和wMB/s:绕过 page cache、直通块设备驱动的真实读写速率(单位 MB/s) -
r_ios和w_ios:底层驱动实际下发的 I/O 次数,即真实 IOPS -
%util和await必须联合看:%util ≈ 100%且await显著升高 → 队列积压;%util很低但await高 → 单个请求慢(如小块随机读、RAID 卡降速)
常用变体:
-
iostat -xh 1:自动换算单位(K/M/G),人眼友好 -
iostat -xk 1:固定 KB 单位,数值精确,适合脚本解析(注意字段名仍是rMB/s,是历史兼容) - 只盯某盘?加路径:
iostat -xh 1 /dev/sdb - 要含 LVM 分区?加
-p ALL:iostat -xh 1 -p ALL
sar -n dev 1 是查网络吞吐的可靠起点
sar 属于 sysstat 包,-n dev 参数专用于网络接口实时吞吐采集:
- 输出中 rxkb/s 和 txkb/s 是内核统计的真实收发速率(单位 KB/s)
- 它不依赖用户态抓包,不受 DNS 解析或连接状态影响,比 iftop 更稳定
- 注意:需提前启用数据收集(/etc/default/sysstat 中设 ENABLED="true"),否则首次运行可能无数据
别用错命令:
-
netstat不统计吞吐,只查连接和路由 -
ifconfig或ip只显示配置和累计字节数,无法算瞬时速率 -
dstat的disk read/disk write列来自 VFS 层,缓存命中时数值失真严重
快速验证:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
sar -n dev 1 3:每秒采样一次,共 3 次 - 若想看 MB/s 单位,手动把
rxkb/s除以 1024,或用awk处理
iftop 和 nload 适合快速定位,但不是吞吐真相
iftop 和 nload 是终端里最直观的工具,但它们解决的是不同问题:
- iftop -n -i eth0:按连接粒度显示流量,能立刻看出哪个 IP 或端口在猛刷带宽,但数值是估算值(基于 libpcap 抓包),受包大小、协议头开销影响
- nload eth0:画柱状图展示整体入出速率,响应快、界面清爽,但不区分 TCP/UDP、不显示进程归属
它们的共同短板:
- 都无法告诉你「这个吞吐是否已落到网卡硬件」——比如 TCP ACK 堆积、TSO/GSO 开启时,
iftop显示的流量可能远高于sar实际上报的txkb/s - 都不能替代
sar -n dev做长期趋势分析或交叉比对
如果发现 iftop 显示 800 Mbps,而 sar -n dev 1 只有 300 Mbps,大概率是:
- 网卡开启了 offload 功能(如 TSO、LRO),软件栈统计和硬件实际发送不一致
- 存在大量小包或重传,
iftop统计了所有报文,sar只统计有效 payload
/proc/net/dev 是最底层、零依赖的原始数据源
/proc/net/dev 提供内核维护的原始累计字节数,没有采样、没有估算、不依赖任何 daemon:
- 第二列是接收字节数(rx_bytes),第十列是发送字节数(tx_bytes)
- 两次读取差值 ÷ 时间间隔 = 近似瞬时速率(单位 B/s),再除以 1024² 得 MiB/s
典型轮询命令:
-
watch -n 2 'grep -E "(eth|ens|wlan)" /proc/net/dev':每 2 秒刷新,高亮活跃接口 - 如果只想看变化量,加
-d参数让watch标出差异
注意陷阱:
-
lo(loopback)接口流量会混入结果,排查真实网卡时务必grep -v "lo:" - 字段顺序固定,但不同内核版本列数可能微调,建议用
awk '{print $2, $10}'提取,而不是靠位置硬编码 - 它不区分方向(比如某个 socket 是双向大流量),也不告诉你是谁发的——要归因到进程,得切回
ss -tulnp或lsof -i
真正卡住人的地方,往往不是不会敲命令,而是把 rkB/s 当吞吐、把 iftop 数值当硬件实测、用 dstat 结论代替 iostat -x 排查——这些混淆一旦发生,后续所有优化动作都是在错误前提下徒劳。

















