iftop 默认以比特为单位显示流量,导致数值被高估8倍;需加-b参数改用字节单位,并配合-n、-n等参数优化性能与准确性。

直接用 iftop 就能实时看到谁在占带宽,但默认行为容易误导人——它默认按比特(bits)显示、做 DNS 反查、还可能卡在解析上。想准确定位问题,得调参数。
为什么 iftop 默认值会误判流量大小
iftop 默认单位是 bits/s,不是 bytes/s,界面里显示的 “1.2MB” 实际是 1.2 Mbits/s ≈ 150 KB/s,差一个 8 倍。不改单位,看监控会严重高估实际吞吐。
- 加
-B参数强制以字节(Bytes)为单位显示:iftop -B -i eth0 - 加
-n禁用 DNS 反向解析,避免卡顿或显示延迟 - 加
-N禁用端口转服务名(如 22 → ssh),减少开销 - 如果只关心某网段,可用
-F 192.168.1.0/24过滤
iftop 界面里三列数字代表什么
右侧三列(如 1.2KB 2.4KB 5.1KB)分别对应 2 秒、10 秒、40 秒窗口内的平均流量,不是瞬时峰值。它反映的是“持续占用趋势”,不是“突发毛刺”。
- 2s 列波动大,适合观察当前连接活跃度
- 40s 列更稳定,适合判断是否真有长连接在吃带宽
- 排序默认按 2s 流量降序,按
Shift+P可切到按 40s 排序,更容易揪出“慢而稳”的异常连接
什么时候不该用 iftop,该换 nload 或 nethogs
iftop 是连接粒度的,只告诉你 “A IP ↔ B IP 占多少”,但不知道哪个进程干的。如果看到某条连接流量高,却找不到归属进程,就得切工具。
- 只想看整块网卡的入/出速率曲线?用
nload eth0—— 更轻、无解析开销、带滚动历史图 - 要直接定位到
pid和命令名?必须用nethogs -d 2(-d控制刷新间隔),但它依赖libpcap且资源占用高,别在低配机器上常驻 -
iftop无法显示 UDP 连接对端(因无连接状态),UDP 流量可能被低估;nethogs同样受限,此时得靠ss -u -i+/proc/net/udp手动关联
监控脚本里调用 iftop 的坑
iftop 是交互式 TUI 工具,不能直接管道取数。想自动化提取数据,得用 -t(text 模式)+ -L(限制行数)+ -P(固定刷新次数)组合:
iftop -t -L 10 -s 1 -B -n -N -i eth0 | head -n 20
注意:-s 1 表示只采集 1 秒数据,但输出仍含表头和空行;真实解析时建议用 awk 跳过前 3 行、过滤掉空行和汇总行(含 total 或 peak 的行)。
真正难的不是启动命令,而是理解它每行输出里 IP 对、端口、三组流量值之间的对齐逻辑——不同版本 iftop 列宽可能微调,硬切字段容易断。稳妥做法是先用 iftop -t -s 1 手动跑一次,确认字段分隔是否稳定再写解析逻辑。











