iftop是实时定位高流量连接的最快工具,需root权限运行,默认单位bit/s,常用参数包括-n(禁DNS)、-N(显端口)、-P(显进程名),界面中=>为本机发送、<=为接收,峰值和40秒平均值比瞬时值更具参考价值。

直接看实时带宽占用,iftop 是最快能定位到具体连接的工具;想查历史趋势或整体基线,vnstat 更可靠;而如果问题已经明确是某个进程吃带宽,nethogs 才是唯一能按进程维度归因的命令。
iftop 实时看谁在连、连得多、流量往哪走
它用 libpcap 抓包统计,所以能看到每个 TCP/UDP 连接的实时速率(单位默认是 bit/s,加 -B 才是 Byte/s)。常见误操作是没加 -n 导致卡顿——DNS 反查会拖慢响应,甚至让界面假死。
-
sudo iftop -n -N -P -i eth0:禁 DNS、显端口、显进程名(需 root)、指定网卡 - 界面里
=>是本机发出去的流量,<=是对方发进来的流量 - 按
Shift + P切换显示/隐藏端口,Shift + H切换显示/隐藏主机名 - 流量峰值(
peak)和最近 40s 平均(rates)比当前瞬时值更有参考价值——瞬时抖动太常见
vnstat 查历史带宽,避开“现在没跑满,但昨天半夜爆了”陷阱
vnstat 不依赖实时抓包,而是轮询 /proc/net/dev 做增量累计,所以资源占用极低,适合长期运行。但它不会告诉你“此刻谁在传”,只回答“过去几小时/天/月用了多少”。首次使用前必须初始化数据库:sudo vnstat -u -i eth0。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
vnstat -h看最近 24 小时每小时流量,适合排查定时任务引发的带宽尖峰 -
vnstat -d看日统计,注意rx(接收)和tx(发送)要分开看——有些业务是单向大流量(如 CDN 回源) - 数据库默认存
/var/lib/vnstat/,迁移服务器时记得同步这个目录,否则历史数据丢失
nethogs 按进程查带宽,但别指望它永远准
它是目前 Linux 下唯一能直接把流量归属到 PID 和进程名的工具,原理是解析 /proc/[pid]/net/ 下的 socket 信息。缺点也很明显:无法识别已退出但 socket 还在 TIME_WAIT 的连接,且对容器内进程支持不稳定(尤其用 podman 或非 systemd-init 的环境)。
-
sudo nethogs -t eth0:加-t输出时间戳,方便和日志对齐 - 看到某个
java进程占高,别急着 kill,先ps -p PID -o pid,ppid,cmd确认是不是你预期的服务 - 如果
nethogs显示 “unknown TCP” 占比高,大概率是短连接风暴(比如健康检查探针密集重连),这时得结合ss -s看 socket 状态分布
别漏掉 /proc/net/dev 这个底层真相源
所有上层工具最终都读它,但很多人忽略它本身就能快速判断硬件瓶颈。比如 rx 字段持续增长但 drop 也在涨,说明网卡收包能力已达上限,不是应用问题,是该换 10G 网卡或调 ring buffer 了。
-
watch -n1 'cat /proc/net/dev | grep eth0':每秒刷新,盯住bytes列变化 - 重点看
drop、errs、fifo这三列,非零就代表链路或驱动层已有丢包 - 对比
ifconfig eth0输出的 “RX errors” 是否一致——不一致说明ifconfig统计滞后或有 bug
真正难的不是看到数字,而是判断哪个数字该信、哪个是干扰项。比如 iftop 显示某 IP 流量高,但 nethogs 里找不到对应进程,那大概率是内核模块(如 iptables raw 表、eBPF 程序)或硬件 offload 在起作用,这时候就得切到 tcpdump 抓包验证了。

















