iftop vs nethogs 对比

两者都是基于 libpcap 的实时网络带宽监控工具,但监控粒度不同:iftop 按”主机/端口”维度nethogs 按”进程”维度

核心差异

维度 iftop nethogs
监控粒度 主机 ↔ 主机、主机 ↔ 端口、端口 ↔ 端口 每个进程的实时带宽
回答的问题 哪个远端在吃我的带宽 本机哪个程序在吃带宽
是否显示进程 是(带 PID / 进程名)
使用权限 一般需 root(抓包) 需 root
显示方向 三列:本机出、远端入、(差值/峰值) 每进程 RX / TX 两列 + 累计列

iftop 的三种模式

iftop 启动后按不同字母切换视角:

按键 模式 说明
默认(无参数) host-to-host 列1 本机→远端,列2 远端→本机
n host-to-port 按 远端主机:端口 聚合
p port-to-port 按 端口:端口 聚合
P 大写端口 显示端口号
t TCP only 只看 TCP
u UDP only 只看 UDP
f 过滤表达式 支持 host/port/proto 过滤

典型输出:

     TX:                                      1st-2nd   Max
                    4.511 MiB                1.20 MiB  12.3 MiB
      host.net    >  8.2.1.10:25          4.20 MiB      ...

     RX:                                      1st-2nd   Max
                    2.11 MiB
      185.1.2.3:443 >  localhost    2.01 MiB

1st-2nd 是 1秒/2秒均值,Max 是峰值)

nethogs 的输出

按进程实时显示,并支持按列排序:

    Nethogs 0.8.7
    Dev: eth0  (press 'h' for help)  Total: 1.22mb/s
    4.712mb  1.532mb      1571  node /usr/lib/xulrunner...
    0.321mb   0.000mb       902  curl
   ...
    PID  Interface  TxRate   RxRate   Total  Command

排序键:x 按 TX、r 按 RX、p 按进程名、P 按累计值。

选型决策树

带宽异常,先定位是"谁"还是"哪个程序"?
├─ 想知道哪个远端IP/端口在拉你的流量
│  → iftop(默认模式,一眼看到 top 主机)
├─ 想细分到端口/服务(DNS、HTTP、某端口)
│  → iftop 按 p / n 切换
├─ 想定位本机哪个进程在占带宽(如某个业务进程、代理、P2P)
│  → nethogs(唯一能按进程看的)
└─ 两者结合:iftop 看到 top 远端 → nethogs 看到 top 进程 → 对应起来

一句话总结

  • iftop:横向视角,看”流量在和本机的哪些远端对话”,适合排查对端问题(哪个 IP 在刷量)。
  • nethogs:纵向视角,看”本机哪个进程在发数据”,适合排查本端问题(哪个 app 偷跑流量)。

排查网络带宽问题时通常两者搭配:先用 iftop 锁定可疑的远端/端口,再用 nethogs 锁定本端进程,最后用 ss/lsof/ftrace 把进程和连接串起来。


补充两个常被一起提及的工具:

工具 用途
nload iftop 的”按网卡总量”版本,显示每张网卡的实时 RX/TX,适合看整机趋势
ss / lsof -i 查具体连接、端口、对应的进程,常作为 nethogs 结果的”最后一公里”

需要我给一份”带宽异常 5 分钟排查”的命令清单(含这些工具的组合用法)吗?