加油
努力

如何查看某个进程占用了多少网络流量?

要查看某个进程占用了多少网络流量,不同操作系统有不同方法。以下是主流系统(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 系统

🔹 资源监视器(图形化,最易用)

  1. Ctrl+Shift+Esc → 打开任务管理器 → “性能”选项卡 → 底部点击 “打开资源监视器”
  2. 切换到 “网络”选项卡 → 查看:
    • “网络活动”列表:按进程显示 发送/接收 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 版本、是否容器化、是否需要自动化),我可以提供定制化命令 👇

云服务器