要查看某个进程占用了多少网络流量,不同操作系统有不同方法。以下是主流系统(Linux、macOS、Windows)的详细方案,按实时监控和历史统计分类,并推荐最实用的方法:
✅ 一、Linux 系统(推荐)
🔹 方法1:nethogs(最直观!按进程实时显示流量)
安装简单,以进程为单位实时显示 上行/下行速率(KB/s)和总流量,支持按 PID/命令名过滤。
# 安装(Ubuntu/Debian)
sudo apt install nethogs
# CentOS/RHEL/Fedora
sudo yum install nethogs # 或 dnf install nethogs
# 运行(需 root 权限)
sudo nethogs
# 指定网卡(如 eth0、wlan0)或过滤特定进程名
sudo nethogs -d 2 eth0 # 每2秒刷新
sudo nethogs -p <PID> # 监控指定 PID
sudo nethogs -t "chrome" # 匹配进程名(需支持 -t)
✅ 优点:界面友好、实时、按进程聚合、支持排序(按流量大小)、可暂停/退出
⚠️ 注意:默认不记录历史总量,但可结合日志或脚本定期抓取。
🔹 方法2:ss + /proc/<pid>/net/dev(手动查当前连接+估算)
适合快速定位高流量进程(非精确统计):
# 查看所有进程的网络连接及接收/发送字节数(需 root)
sudo ss -tunlp
# 获取某进程(如 PID=1234)的 socket 统计(需内核支持)
sudo cat /proc/1234/fd/ | grep socket 2>/dev/null | wc -l # 连接数粗略参考
⚠️ 但
/proc/pid/net/dev并不存在(该文件在/proc/net/dev中是全局网卡统计),单个进程的精确流量无法直接从/proc获取 —— Linux 内核不维护 per-process 流量计数器(除非用 eBPF)。
🔹 方法3:bpftrace / bcc-tools(高级:eBPF 实时精准统计)
适合需要精确累计流量(字节/包)并按进程分组的场景(生产环境推荐):
# 安装 bcc-tools(Ubuntu)
sudo apt install bpfcc-tools linux-headers-$(uname -r)
# 实时统计每个进程的 TCP 发送/接收字节数(按秒汇总)
sudo tcplife -C # 显示 TCP 连接生命周期(含发送/接收字节数)
sudo nettop # 类似 top,按进程显示实时网络吞吐(KB/s)
sudo bitesize # 按进程统计每秒收发字节数直方图
# 更强:自定义统计(示例:统计 chrome 的总流量)
sudo bpftrace -e '
kprobe:tcp_sendmsg { @bytes["chrome"] = sum(arg2); }
kprobe:tcp_cleanup_rbuf { @bytes["chrome"] = sum(arg2); }
interval:s:5 { print(@bytes); clear(@bytes); }
'
✅ 精准、低开销、支持历史聚合;需 4.15+ 内核。
🔹 方法4:iftop(按连接而非进程,但可关联)
sudo iftop -P # 显示端口 → 用 lsof 反查进程
# 然后另开终端查端口对应进程:
sudo lsof -i :8080
❌ 缺点:不是直接按进程,需手动关联,不适合多端口服务。
✅ 二、macOS 系统
🔹 nethogs(通过 Homebrew 安装)
brew install nethogs
sudo nethogs en0 # 替换为你的网卡(如 en0, en1)
🔹 nettop(系统原生,强大且推荐 ✅)
# 实时按进程显示流量(KB/s 和总字节数)
sudo nettop -P -L 0 # -P: 进程模式;-L 0: 无限刷新
# 查看特定进程(如 firefox)
sudo nettop -P -J pid,command,rx_bytes,tx_bytes | grep firefox
# 导出最近 60 秒统计(JSON 格式,便于解析)
sudo nettop -L 60 -P -j > netstat.json
✅ 支持 rx_bytes/tx_bytes 累计值(重启 nettop 后清零),可长期运行统计。
✅ 三、Windows 系统
🔹 资源监视器(图形化,最易用)
Ctrl+Shift+Esc→ 打开任务管理器 → “性能”选项卡 → 底部点击 “打开资源监视器”- 切换到 “网络”选项卡 → 查看:
- “网络活动”列表:按进程显示 发送/接收 B/sec(实时速率)
- 滚动到底部:“TCP 连接”可看到各连接详情
- ❗注意:不显示历史总流量(字节累计),仅实时速率。
🔹 PowerShell(获取实时速率)
# 获取前 10 个网络活跃进程(基于 NetAdapter)
Get-Counter 'Process(*)IO Write Bytes/sec', 'Process(*)IO Read Bytes/sec' -SampleInterval 1 -MaxSamples 5 |
ForEach-Object {
$_.CounterSamples | Where-Object {$_.CookedValue -gt 0} |
Sort-Object CookedValue -Descending |
Select-Object InstanceName, CookedValue, Path -First 10
}
⚠️ 此法实际统计的是磁盘 IO,Windows 没有原生 per-process 网络字节计数器。更准确需用
Get-NetTCPConnection+Get-Process关联端口,再配合PerformanceCounter(复杂且非直接)。
🔹 第三方工具(推荐)
- CurrPorts(免费):显示所有 TCP/UDP 连接 + 进程名 + 本地/远程地址/端口,支持导出。
- Microsoft Message Analyzer(已停更,可用 Wireshark + tshark 过滤)
- Wireshark + tshark(命令行):
# 抓包并按进程名过滤(需配合 netstat/lsof 类工具先获 PID→端口映射) tshark -i Ethernet -f "port 8080" -T fields -e ip.src -e ip.dst -e frame.len | awk '{sum += $3} END {print "Total bytes:", sum}'
✅ 四、跨平台/通用方案(开发/运维推荐)
| 工具 | 说明 | 是否支持累计流量 | 备注 |
|---|---|---|---|
nethogs |
Linux/macOS(brew) | ❌ 实时速率为主(可脚本累加) | ✅ 最轻量、最常用 |
nettop (macOS) |
原生 | ✅ rx_bytes/tx_bytes 累计 |
macOS 首选 |
bpftrace/bcc |
Linux 4.15+ | ✅ 精确累计 | 生产级,需权限 |
vnstat + 进程关联 |
Linux | ✅ 全局网卡历史,需配合 nethogs 日志 |
适合长期趋势分析 |
💡 技巧:长期监控某进程?
# 每10秒记录 nethogs 输出(保存到文件) sudo nethogs -t -c 1 -d 10 eth0 2>/dev/null | tee -a /tmp/chrome_traffic.log然后用
awk解析提取数据。
✅ 总结:按场景推荐
| 场景 | 推荐工具 | 说明 |
|---|---|---|
| 🚀 快速排查哪个进程“吃带宽” | nethogs(Linux/macOS)或 nettop(macOS) |
实时、直观、开箱即用 |
| 📊 需要精确累计字节数(如计费、审计) | bcc-tools(Linux)或 nettop -j(macOS) |
支持导出 JSON/CSV,可编程处理 |
| 💻 Windows 用户 | 资源监视器 + CurrPorts | 免安装、安全、信息全 |
| 🧪 开发调试/协议分析 | Wireshark/tshark + lsof/netstat |
可深入到包级别 |
需要我帮你:
- ✅ 写一个自动统计某进程(如
python3 myapp.py)过去 1 小时总流量的 Bash/Python 脚本? - ✅ 解析
nethogs日志生成图表(用 gnuplot 或 Python matplotlib)? - ✅ 在 Docker/Kubernetes 环境中监控容器内进程流量?
欢迎随时告诉我你的具体环境(OS 版本、是否容器化、是否需要自动化),我可以提供定制化命令 👇
云小栈