网站突然变慢,CPU 和内存都正常,磁盘也没问题——这时候最该看的是网络。带宽被跑满、某个进程在偷偷对外发包、被 CC 攻击、网卡出现丢包或错包,这些都会表现为"服务慢"而不是"服务挂"。Linux 下监控网络流量的工具分三层:看总量的(sar、vnstat、/proc/net/dev)、看实时速率的(iftop、nload、bmon)、看进程与连接归属的(nethogs、ss、tcpdump)。本文按这三层组织,给出每个工具的准确用法、输出解读和选型建议,并附一套带宽打满时的标准排查流程。
一、基础层:从内核计数器读总量
内核在 /proc/net/dev 里维护了每个网卡的收发统计,这是所有流量工具的数据源头。直接读它能获得最原始、无依赖的数据。
# 查看各网卡累计收发字节、包数、错误数 cat /proc/net/dev # 更易读的形式(需要 iproute2) ip -s link ip -s -h link show eth0 # 传统方式 netstat -i ifconfig eth0
ip -s link 的输出里,每个网卡下面有两段统计:RX(接收)与 TX(发送),字段包括 bytes(累计字节)、packets(包数)、errors(错误包)、dropped(丢弃包)、overrun(溢出)、multicast。判断标准:dropped 或 errors 持续增长就是异常,常见于网卡 ring buffer 不足、驱动问题或交换机端口协商异常;偶发的少量 dropped 可以忽略,但每分钟涨几十个就要处理。
1.1 sar:带历史数据的主力工具
sar 属于 sysstat 软件包,它既能看实时,也能看历史(数据由 sadc 每 10 分钟采集一次,保存在 /var/log/sa/)。这是事后复盘"昨天下午三点流量什么样"的唯一手段。
# 安装与启用 yum install -y sysstat # 或 apt install -y sysstat systemctl enable --now sysstat # 实时采样:每秒 1 次,共 5 次,看各网卡流量 sar -n DEV 1 5 # 只看某个网卡 sar -n DEV 1 5 | grep eth0 # 看历史(sa18 表示 18 号的数据) sar -n DEV -f /var/log/sa/sa18 sar -n DEV -f /var/log/sa/sa18 -s 14:00:00 -e 16:00:00 # 看 TCP 连接与重传 sar -n TCP,ETCP 1 5 # 看错误包 sar -n EDEV 1 5
怎么读 sar -n DEV 的输出:关键三列是 rxkB/s(每秒接收 KB)、txkB/s(每秒发送 KB)、%ifutil(带宽利用率)。判断标准:%ifutil 持续超过 70% 说明带宽接近饱和,需要考虑扩容或限流;把 rxkB/s 乘以 8 再除以 1000 可以粗略换算成 Mbps(1 MB/s ≈ 8 Mbps),例如 rxkB/s 为 12500 约等于 100 Mbps。
1.2 vnstat:轻量长期统计
vnstat 后台常驻,按小时/天/月累计流量,占用极低,适合长期观察月度流量与判断是否超套餐。
# 安装并启动 yum install -y vnstat systemctl enable --now vnstat # 查看日报、月报 vnstat vnstat -d # 日 vnstat -m # 月 vnstat -h # 按小时 # 实时模式 vnstat -l -i eth0 # 指定网卡 vnstat -i eth0
二、实时层:看当前速率和流向
2.1 iftop:看"谁在跟谁通信"
iftop 是排查带宽问题的第一工具,它按连接(IP 对)展示实时速率,能直接看出是哪一个远端 IP 在吃带宽。
# 安装 yum install -y iftop # 需 EPEL 源 apt install -y iftop # 基本用法 iftop -i eth0 # 不解析主机名、以端口显示(强烈推荐,避免 DNS 拖慢) iftop -n -i eth0 iftop -nNP -i eth0 # 只显示某个网段的流量 iftop -n -F 10.0.0.0/24 -i eth0 # 以字节而非比特显示 iftop -B -i eth0
界面解读:顶部刻度条显示当前速率峰值;中间三列分别是 最近 2 秒、10 秒、40 秒的平均速率,两侧箭头指示方向(=> 为发送,<= 为接收);底部三行累计值是 TX 累计、RX 累计、总计,以及对应的 2s/10s/40s 峰值速率。常用交互键:P 切换显示端口、T 切换显示累计流量、s/d 切换只显示源/目的、L 打开刻度对数、q 退出。
判断方法:如果某一个远端 IP 长期占据 top 且速率接近带宽上限,基本可以锁定流量来源;如果大量不同 IP 且每个速率都不高,但总量很高,多半是扫描或 CC 攻击。
2.2 nload:只看总速率曲线
当你只想快速知道"现在上/下行各跑了多少"时,nload 最直观,它画实时曲线。
nload eth0 nload -m -u M eth0 # -m 只显示一个设备,-u M 以 MB/s 为单位 nload -t 1000 eth0 # 刷新间隔 1000ms
输出分为 Incoming(入)与 Outgoing(出)两块,各含当前值(Curr)、平均值(Avg)、最小值(Min)、最大值(Max)与总传输量(Ttl)。判断标准:把 Curr 与购买的带宽上限对比,例如 5Mbps 带宽对应约 600KB/s,如果 Curr 长期顶在这个值附近,说明带宽已打满。
2.3 其他实时工具速览
# bmon:图形化展示各网卡,支持多网卡 bmon -p eth0 # dstat:同时看 CPU/磁盘/网络/内存 dstat -n -N eth0 1 dstat -tnf 1 # 时间+网络+系统统计 # nmon:综合性能工具,按 n 看网络 nmon # iptraf-ng:菜单式,可看按端口/按协议的细分统计 iptraf-ng # tcptrack:按 TCP 连接展示速率 tcptrack -i eth0
三、归属层:找出是哪个进程在跑流量
iftop 只能看到 IP 和端口,要知道"哪个进程",需要下面这些工具。
3.1 nethogs:按进程统计流量
# 安装 yum install -y nethogs # 需 EPEL apt install -y nethogs # 查看按进程的实时流量 nethogs eth0 # 指定刷新间隔(秒) nethogs -d 5 eth0 # 只看 TCP/UDP 某一种 nethogs -t eth0 # tracemode,适合脚本采集
输出列依次为 PID、用户、程序名、网卡、发送速率、接收速率。nethogs 是"挖矿木马排查"的利器:如果看到一个陌生进程持续占用几 Mbps 的上行流量,基本可以确定异常。注意它需要 root 权限,且在某些容器/虚拟化环境下可能无法准确映射进程。
3.2 用 ss 定位连接与进程
# 查看已建立连接及其进程,按远端 IP 统计
ss -antp | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
# 统计本机各端口的连接数
ss -ant | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -rn | head
# 找出连接数最多的远端 IP(疑似攻击源)
ss -ant | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# 按进程维度统计连接数
ss -antp | grep -oP 'users:\(\("\K[^"]+' | sort | uniq -c | sort -rn
判断标准:单个 IP 建立数百上千条 ESTABLISHED 连接,是典型的 CC 攻击或异常客户端特征;正常浏览器一般不会超过几十条。
3.3 tcpdump:抓包看细节
# 抓取 eth0 上 80 端口的包,只抓 1000 个后停止
tcpdump -i eth0 -nn -c 1000 tcp port 80
# 抓取某主机的包
tcpdump -i eth0 -nn host 10.0.0.20
# 抓取并保存供 Wireshark 分析
tcpdump -i eth0 -nn -s 0 -w /tmp/capture.pcap host 10.0.0.20 and port 443
# 只抓 SYN 包,看连接建立情况
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0'
# 统计每秒包数(判断 PPS 攻击)
tcpdump -i eth0 -nn | awk '{print $1}' | uniq -c
参数说明:-nn 不解析主机名与端口名(必须加,否则慢且不利于分析);-c 限制抓包数量;-s 0 抓取完整包长;-w 写入文件。抓包会产生额外 I/O 与 CPU 开销,生产环境务必加 -c 限制数量,避免把本来紧张的机器压垮。
四、工具选型对比
| 工具 | 维度 | 是否有历史 | 安装需求 | 最适合场景 |
|---|---|---|---|---|
| ip -s link | 网卡累计与错误 | 否 | 系统自带 | 快速看丢包/错包 |
| sar -n DEV | 网卡速率与利用率 | 是 | sysstat | 事后复盘历史流量 |
| vnstat | 小时/日/月累计 | 是 | vnstat | 月度流量与套餐核对 |
| iftop | 按 IP 连接的实时速率 | 否 | iftop(EPEL) | 带宽被谁吃了 |
| nload | 总上下行曲线 | 否 | nload | 一眼看当前跑多少 |
| nethogs | 按进程的流量 | 否 | nethogs(EPEL) | 定位异常进程/挖矿 |
| ss / netstat | 连接与进程归属 | 否 | iproute2 / net-tools | 看连接数、找攻击源 |
| tcpdump | 数据包内容 | 否(可存 pcap) | tcpdump | 协议级深度分析 |
| Zabbix/Prometheus | 长期趋势与告警 | 是 | 需部署 | 常态化监控与阈值告警 |
五、带宽打满时的排查步骤清单
- 确认是否真的打满:
sar -n DEV 1 5看 %ifutil 与 rxkB/s、txkB/s,换算成 Mbps 与购买带宽对比;同时nload看实时曲线。 - 看是入还是出:入向打满常见于下载服务、镜像同步、被刷流量;出向打满常见于对外提供大文件、CDN 回源、数据泄露或挖矿外联。
- 锁定流向:
iftop -nNP -i 网卡,看 top 连接的远端 IP 与端口。 - 锁定进程:
nethogs 网卡找到 PID,再ps -fp PID确认是什么程序、跑在哪个目录。 - 统计连接来源:
ss -ant | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head,识别异常 IP。 - 判断是否攻击:单一 IP 连接数异常高、SYN 大量未建连、User-Agent 高度一致 → 考虑 iptables/防火墙限流或接入高防;正常业务增长 → 考虑扩容带宽或做缓存/CDN。
- 检查异常外联:若出向流量集中在陌生远端端口(如 3333、8080 等非业务端口),应立即隔离排查木马,检查 crontab、/tmp 与 systemd 服务。
- 应急处理:临时用
iptables或wondershaper/tc限速,保证核心业务可用;事后用ss -antp与审计日志复盘。 - 建立常态监控:把网卡流量、错包数、连接数纳入 Zabbix/Prometheus,设置带宽 70% 预警、90% 严重告警。
六、单位换算与判断阈值速查
| 指标 | 换算/阈值 | 说明 |
|---|---|---|
| 字节与比特 | 1 MB/s = 8 Mbps | sar 输出的是 kB/s,乘 8 除以 1000 得 Mbps |
| 带宽利用率 | %ifutil > 70% 需关注,> 90% 紧急 | sar -n DEV 的最后一列 |
| 丢包 | dropped 持续增长即异常 | ip -s link 或 sar -n EDEV |
| 单 IP 连接数 | 超过数百条高度可疑 | ss 统计 ESTABLISHED |
| PPS | 小包攻击看每秒包数而非带宽 | sar -n DEV 的 rxpck/s、txpck/s |
| TIME_WAIT | 超过数万需关注 | ss -ant 统计,短连接服务常见 |
小结
网络流量监控的思路是从粗到细逐层收敛:先用 sar/nload 确认"总量是否异常以及是入还是出",再用 iftop 锁定"跟哪些 IP 通信",再用 nethogs/ss 定位"是哪个进程、哪些连接",最后必要时用 tcpdump 做协议级取证。日常建议:sysstat 必须装并开启(否则事后无法复盘)、iftop 和 nethogs 预装到运维镜像里(出事时才不用现装)、把带宽利用率与错包数接入监控告警。有了这三层工具链,"服务突然变慢"这类模糊问题就能被快速定位到具体的 IP 和进程。
避坑清单
- iftop 不加 -n 会因 DNS 反查变慢,始终使用
iftop -nNP。 - tcpdump 在生产环境必须加 -c 限制,无限制抓包可能写满磁盘或加剧负载。
- 容器内看到的流量统计可能不准,网络命名空间隔离会导致部分工具失效,需在宿主机或网络命名空间内执行。
- sar 没历史数据通常是 sysstat 采集没启用,光装包不够,要
systemctl enable --now sysstat。 - 不要把 kB/s 当成 kb/s,大小写 B 含义不同,差 8 倍,这是容量评估出错的常见原因。
- 网卡名不一定是 eth0,新发行版可能是 ens33、enp0s3 等,先用
ip link确认。 - nethogs 需要 root 权限,且在部分内核/容器组合下无法正确映射进程,此时改用 ss -antp 辅助判断。
- 限速类操作(tc)误配会直接断网,务必提前准备恢复命令并保留带外管理通道。
企业QQ咨询




