CentOS 7 网卡带宽跑满怎么定位是哪个进程?

文章导读
在 CentOS 7 上定位占用网卡带宽的进程,最推荐直接使用 nethogs 工具按进程展示实时流量。适用场景为生产环境突发流量告警或日常排查,操作需要 root 权限,风险在于工具本身会消耗少量系统资源。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
A A

在 CentOS 7 上定位占用网卡带宽的进程,最推荐直接使用 nethogs 工具按进程展示实时流量。适用场景为生产环境突发流量告警或日常排查,操作需要 root 权限,风险在于工具本身会消耗少量系统资源。

先说结论:使用 nethogs 可直接看到每个进程的网络吞吐量,配合 ss 命令可进一步确认连接详情。

  • 先确认:使用 ip addr 确认当前主网卡名称,排除 loopback 接口干扰。
  • 先处理:安装并运行 nethogs 定位 PID,结合 ps 命令确认进程身份。
  • 再验证:停止可疑进程或限流后,观察网卡流量是否回落至正常水位。

命令速用版

以下命令需 root 权限执行,直接复制即可使用:

yum install -y nethogs
nethogs <网卡名>
ss -antp | grep <端口或进程名>

为什么会这样

Linux 标准 top 命令默认不显示网络 IO 数据,导致无法直接看出哪个进程占用带宽。内核网络统计基于 socket 连接,需专用工具将 socket 映射到进程 PID 才能直观展示。

分步处理

第一步,确认网卡名称。执行 ip addr 查看流量跑满的网卡接口,通常是 eth0 或 ens33。

第二步,安装监控工具。执行 yum install -y nethogs 安装,若源不可用可尝试编译安装。

CentOS 7 网卡带宽跑满怎么定位是哪个进程?

第三步,定位进程。运行 nethogs <网卡名>,界面会列出 PID 和程序名,按 Shift+T 可切换排序方式。

第四步,确认进程详情。记下高流量 PID,执行 ps -fp <PID> 查看启动命令和所属用户。

第五步,处置进程。根据业务重要性选择 kill 停止、nice 降权或使用 tc 命令限流。

怎么验证是否生效

保持 nethogs 运行,观察目标进程流量是否归零。同时新开终端执行 sar -n DEV 1 查看网卡整体吞吐率是否下降。

常见坑

第一,Docker 容器网络。容器内进程在宿主机 nethogs 中可能显示为 docker-proxy 或 veth 接口,需进入容器内部排查。

CentOS 7 网卡带宽跑满怎么定位是哪个进程?

第二,短连接进程。若进程频繁启停,nethogs 可能抓不到 PID,需结合 tcpdump 抓包分析。

第三,权限不足。未使用 root 运行 nethogs 会报错无法读取网络数据,必须加 sudo 或切换用户。

常见问题

不安装工具怎么临时查看?

可使用 ss -antp 查看连接对应的 PID,再结合 /proc/<PID>/fd 查看文件描述符推测,但无法看到实时带宽数值。

Docker 容器占用带宽怎么查?

在宿主机执行 docker stats 查看容器网络 IO,或进入容器内部安装 nethogs 排查具体进程。

为什么 nethogs 显示 PID 为 0?

通常代表内核线程或无法关联到用户态进程的网络流量,如 NAT 转发或部分驱动层数据,需结合 dmesg 排查。