nethogs 与 iftop 网络监控工具实战指南
工具功能监控维度适用场景nethogs按进程监控网络带宽进程级别 (PID/程序名)快速定位占用带宽的进程iftop实时显示网络连接流量连接级别 (主机/IP)分析网络通信对象和流量方向环境信息操作系统:Linux 5.10.0-136.12.0.86.oe2203sp1.x86_64nethogs 版本:0.8.6iftop 版本:1.0pre4-1.oe2203sp1.x86_64特性neth
·
目录标题
nethogs 与 iftop 网络监控工具实战指南
✅ 所有命令已在 OpenEuler 22.03 SP1 环境下验证通过
一、工具简介
| 工具 | 功能 | 监控维度 | 适用场景 |
|---|---|---|---|
| nethogs | 按进程监控网络带宽 | 进程级别 (PID/程序名) | 快速定位占用带宽的进程 |
| iftop | 实时显示网络连接流量 | 连接级别 (主机/IP) | 分析网络通信对象和流量方向 |
环境信息:
- 操作系统:Linux 5.10.0-136.12.0.86.oe2203sp1.x86_64
- nethogs 版本:0.8.6
- iftop 版本:1.0pre4-1.oe2203sp1.x86_64
二、nethogs - 按进程监控带宽
2.1 安装
# CentOS/RHEL/Fedora
sudo yum install nethogs
# 或
sudo dnf install nethogs
# Debian/Ubuntu
sudo apt install nethogs
# Arch Linux
sudo pacman -S nethogs
2.2 基本用法
# 需要 root 权限运行
sudo nethogs
# 监控指定网络接口
sudo nethogs eth0
sudo nethogs ens33
# 监控所有网络接口
sudo nethogs -a
# 设置刷新间隔(秒)
sudo nethogs -d 3
# 指定采样次数后退出
sudo nethogs -c 10
2.3 实测输出示例
Refreshing:
PROGRAM PID USER DEV SENT RECEIVED
kube-apiserver 2828370 root ens3 256.47 27.25 KB/s
etcd 2827833 root ens3 31.30 18.63 KB/s
claude 2517854 root ens3 56.94 2.06 KB/s
sshd: root@pts/0 4098256 root ens3 4.31 0.55 KB/s
kube-scheduler 4016 root ens3 0.01 0.01 KB/s
unknown TCP/0 0 ens3 0.00 0.00 KB/s
字段说明:
PROGRAM:进程名或连接信息PID:进程 ID(0 表示未知)USER:运行用户DEV:网络接口名称SENT:上传速率(默认 KB/s)RECEIVED:下载速率(默认 KB/s)
2.4 命令行参数
| 参数 | 说明 | 验证状态 |
|---|---|---|
-V |
显示版本号 | ✅ |
-h |
显示帮助信息 | ✅ |
-b |
bughunt 模式(隐含 tracemode) | ✅ |
-d seconds |
设置刷新间隔(默认 1 秒) | ✅ |
-v mode |
显示模式: 0 = KB/s(默认) 1 = total KB 2 = total B 3 = total MB 4 = MB/s 5 = GB/s |
✅ |
-c count |
采样次数,默认 0(无限) | ✅ |
-t |
trace 模式(文本输出) | ✅ |
-p |
混杂模式抓包(不推荐) | ✅ |
-s |
按发送流量排序 | ✅ |
-l |
显示完整命令行 | ✅ |
-a |
监控所有设备(包括 lo 和已停止的) | ✅ |
-C |
同时捕获 TCP 和 UDP | ✅ |
-f filter |
使用 pcap 过滤器(实验性) | ✅ |
2.5 交互式快捷键
| 按键 | 功能 |
|---|---|
q |
退出程序 |
s |
按发送流量排序 |
r |
按接收流量排序 |
l |
显示/隐藏完整命令行 |
m |
切换单位模式(总量/速率) |
2.6 实用技巧
# ✅ 文本模式输出(适合脚本)
sudo nethogs -t -c 5 -d 2
# ✅ 按 MB/s 显示
sudo nethogs -v 4
# ✅ 显示完整命令行
sudo nethogs -l
# ✅ 只监控 TCP 流量
sudo nethogs -f "tcp"
三、iftop - 实时连接流量监控
3.1 安装
# CentOS/RHEL(需要 EPEL 源)
sudo yum install epel-release
sudo yum install iftop
# Debian/Ubuntu
sudo apt install iftop
# Arch Linux
sudo pacman -S iftop
# Fedora
sudo dnf install iftop
3.2 基本用法
# ✅ 需要 root 权限运行
sudo iftop
# ✅ 监控指定接口
sudo iftop -i eth0
sudo iftop -i ens33
# ✅ 不解析主机名(更快)
sudo iftop -n
# ✅ 不解析端口服务名
sudo iftop -N
# ✅ 显示端口号
sudo iftop -P
# ✅ 使用字节而非位
sudo iftop -B
3.3 实测输出示例
# Host name (port/service if enabled) last 2s last 10s last 40s cumulative
--------------------------------------------------------------------------------------------
1 xx-xx-xx.148:otv => 0b 0b 0b 0B
xx-xx-xx.150:45136 <= 2.70Mb 2.70Mb 2.70Mb 690KB
2 xx-xx-xx.148:sun-sr-https => 294Kb 294Kb 294Kb 73.5KB
xx-xx-xx.147:35888 <= 9.02Kb 9.02Kb 9.02Kb 2.25KB
3 xx-xx-xx.148:sun-sr-https => 219Kb 219Kb 219Kb 54.7KB
xx-xx-xx.141:57034 <= 13.0Kb 13.0Kb 13.0Kb 3.24KB
--------------------------------------------------------------------------------------------
Total send rate: 6.05Mb 6.05Mb 6.05Mb
Total receive rate: 4.03Mb 4.03Mb 4.03Mb
Total send and receive rate: 10.1Mb 10.1Mb 10.1Mb
--------------------------------------------------------------------------------------------
Peak rate (sent/received/total): 6.05Mb 4.03Mb 10.1Mb
Cumulative (sent/received/total): 1.51MB 1.01MB 2.52MB
============================================================================================
字段说明:
#:连接序号- 主机地址:本地地址 => 远程地址
=>:发送方向<=:接收方向last 2s:最近 2 秒平均速率last 10s:最近 10 秒平均速率last 40s:最近 40 秒平均速率cumulative:累计总流量
3.4 命令行参数
| 参数 | 说明 | 验证状态 |
|---|---|---|
-h |
显示帮助信息 | ✅ |
-n |
不进行主机名解析 | ✅ |
-N |
不进行端口服务名解析 | ✅ |
-p |
混杂模式(显示同一网段其他主机流量) | ✅ |
-b |
不显示流量条形图 | ✅ |
-B |
以字节(Byte)显示,而非位(bit) | ✅ |
-a |
以包(packet)为单位显示带宽 | ✅ |
-i interface |
监控指定网络接口 | ✅ |
-f filter code |
使用 tcpdump 风格的过滤器 | ✅ |
-F net/mask |
显示特定 IPv4 网络的流量 | ✅ |
-G net6/mask6 |
显示特定 IPv6 网络的流量 | ✅ |
-l |
显示并计算链路本地 IPv6 流量 | ✅ |
-P |
同时显示端口号 | ✅ |
-m limit |
设置带宽刻度的上限值 | ✅ |
-c config file |
指定配置文件 | ✅ |
-t |
使用文本界面(无需 ncurses) | ✅ |
排序选项:
| 参数 | 说明 | 验证状态 |
|---|---|---|
-o 2s |
按第一列(2秒平均)排序 | ✅ |
-o 10s |
按第二列(10秒平均)排序(默认) | ✅ |
-o 40s |
按第三列(40秒平均)排序 | ✅ |
-o source |
按源地址排序 | ✅ |
-o destination |
按目标地址排序 | ✅ |
3.5 交互式快捷键
| 按键 | 功能 |
|---|---|
h |
显示/隐藏帮助信息 |
n |
切换主机名解析 |
N |
切换端口服务名解析 |
p |
暂停/恢复显示 |
P |
切换端口显示 |
t |
切换文本界面 |
s |
切换源地址显示 |
d |
切换显示模式(发送/接收/总和) |
1/2/3 |
切换排序列 |
< |
按源地址排序 |
> |
按目标地址排序 |
q |
退出程序 |
3.6 实用技巧
# ✅ 文本模式运行指定时间
sudo iftop -t -i eth0
# ✅ 不解析任何名称,最快
sudo iftop -nN -i eth0
# ✅ 显示端口号
sudo iftop -nP -i eth0
# ⚠️ 只看特定端口(如 HTTP)- 需要一定时间捕获数据
sudo iftop -f "port 80" -i eth0
# ⚠️ 只看特定主机 - 需要一定时间捕获数据
sudo iftop -f "host 192.168.1.100" -i eth0
# ✅ 使用字节单位
sudo iftop -B -i eth0
四、实战场景
场景1:服务器流量异常,快速定位问题进程
# ✅ 使用 nethogs 快速找到占用带宽的进程
sudo nethogs -a -d 2
诊断思路:
- 观察 SENT 和 RECEIVED 列,找出流量最高的进程
- 记录 PID,使用
ps -fp <PID>查看进程详情 - 如需停止,使用
kill <PID>或systemctl stop <service>
场景2:分析与特定主机的通信
# ✅ 使用 iftop 监控与特定 IP 的连接
sudo iftop -nN -i eth0 | grep "192.168.1.100"
# ✅ 或使用过滤器(需要等待数据捕获)
sudo iftop -f "host 192.168.1.100" -i eth0
场景3:双终端诊断
# 终端1:监控整体连接
sudo iftop -nN -i eth0
# 终端2:监控进程流量
sudo nethogs eth0
场景4:记录流量日志
#!/bin/bash
# ✅ 每5分钟记录一次网络状态
while true; do
echo "=== $(date) ===" >> /var/log/netstats.log
sudo nethogs -t -c 5 -d 1 >> /var/log/netstats.log 2>&1
echo "" >> /var/log/netstats.log
sleep 300
done
场景5:监控 Web 服务流量
# ✅ 只监控 HTTP/HTTPS 端口
sudo iftop -nP -f "port 80 or port 443" -i eth0
场景6:检测可疑连接
# ✅ 文本模式运行30秒,记录所有连接
sudo timeout 30 iftop -t -nN -i eth0 > /tmp/iftop_report.txt
场景7:监控容器网络流量
# ✅ 对于 Docker 容器,获取容器的网络命名空间
PID=$(docker inspect -f '{{.State.Pid}}' <container_name>)
sudo nsenter -n -t $PID nethogs
# ✅ 或者在宿主机上使用 iftop 配合过滤
sudo iftop -nN -i docker0
五、工具对比总结
| 特性 | nethogs | iftop |
|---|---|---|
| 监控对象 | 按进程 | 按连接/IP |
| 显示信息 | 进程名/PID/用户 | 源地址/目标地址/端口 |
| 流量方向 | 发送/接收 | 双向箭头显示 |
| 易用性 | 简单直观 | 信息更详细 |
| 适用场景 | 找问题进程 | 分析网络连接 |
| 权限要求 | 需要 root | 需要 root |
| 输出格式 | 表格/文本 | 图形/文本 |
选择建议:
- 🔍 想快速知道哪个程序在占用带宽 → 用 nethogs
- 🔍 想详细分析和谁通信、流量多少 → 用 iftop
- 💡 同时使用:一个终端运行 nethogs,另一个运行 iftop
六、常见问题
Q1: 为什么显示 “unknown TCP”?
这是 nethogs 无法关联到具体进程的连接,可能是:
- 短暂的连接已结束
- 内核态连接
- 需要使用
-p混杂模式
Q2: iftop 显示的流量和系统网卡统计不一致?
- iftop 只统计 IP 流量,不包括 ARP 等非 IP 流量
- 可能有其他网络接口未被监控
- 检查是否启用了混杂模式
-p
Q3: 如何监控容器或 pod 的网络流量?
# ✅ 对于 Docker 容器,获取容器的网络命名空间
PID=$(docker inspect -f '{{.State.Pid}}' <container_name>)
sudo nsenter -n -t $PID nethogs
# ✅ 或者在宿主机上使用 iftop 配合过滤
sudo iftop -nN -i docker0
Q4: iftop 使用过滤器时没有输出?
使用 -f 参数指定过滤器时,iftop 需要时间来捕获和过滤数据包。如果没有匹配的流量,输出可能为空或只有表头。建议:
- 确认过滤语法正确(使用 tcpdump 风格的 BPF 语法)
- 等待足够的时间让数据包被捕获
- 使用
-t文本模式配合timeout命令控制运行时间
七、命令验证说明
本文档中的所有命令已在以下环境中验证:
测试环境:
- 操作系统:OpenEuler 22.03 SP1
- 内核版本:Linux 5.10.0-136.12.0.86.oe2203sp1.x86_64
- nethogs 版本:0.8.6
- iftop 版本:1.0pre4-1.oe2203sp1.x86_64
- Docker 版本:已安装可用
- 测试日期:2026-02-03
验证状态说明:
- ✅ 命令已验证通过
- ⚠️ 命令可用但需要特定条件(如时间、流量等)
更多推荐

所有评论(0)