在Linux服务器运维中,精准定位占用带宽的进程是排查网络拥塞和性能瓶颈的关键,由于Linux内核默认按网络接口或套接字统计流量,而非直接按进程维度展示,因此无法通过单一的基础命令直接获取进程流量。核心上文归纳是:通过nethogs工具可以直接按进程监控实时流量,而结合iftop与netstat(或ss)则能实现从端口到进程的精准映射,这是最主流且高效的解决方案,利用pidstat可分析历史传输数据,而在高阶场景下,基于eBPF的工具能提供更底层的可视化分析。

使用Nethogs进行进程级流量监控
Nethogs是Linux下监控进程网络流量的首选工具,它不同于传统的iftop或nload,后者主要针对网卡或端口,而Nethogs能够按进程(PID)分组,展示每个进程的实时发送和接收速率,这种方式类似于“网络版的top”命令,能够直观地发现异常占用带宽的进程。
在使用Nethogs之前,通常需要先进行安装,在基于RedHat或CentOS的系统上,可以使用yum install nethogs;在Debian或Ubuntu系统上,则使用apt install nethogs,安装完成后,直接执行sudo nethogs即可启动监控,输出界面中,SENT和RECEIVED列分别代表该进程当前的发送和接收速率,单位默认为KB/s,如果需要查看更详细的流量信息,可以使用nethogs -t参数,以更紧凑的格式输出,便于日志记录,Nethogs的优势在于其轻量级和直观性,特别适合快速定位突发流量导致的网络卡顿问题。
结合Iftop与Netstat实现端口到进程的映射
虽然Nethogs非常直接,但在某些未安装该工具的环境下,或者需要查看具体的通信对端IP时,组合使用Iftop和Netstat(或ss)是更通用的专业方案,这种方法的逻辑是:先通过Iftop锁定占用流量高的端口,再通过Netstat查找占用该端口的进程。
使用iftop -i eth0(指定网卡)查看实时流量,Iftop会列出所有连接的源IP、目的IP以及对应的端口,并显示箭头指示流量方向,操作者需要关注流量最大的连接条目,记录下本地端口号,随后,使用netstat -tunlp | grep <端口号>或更快的ss -tunlp | grep <端口号>命令。ss命令作为netstat的现代替代品,在处理大量连接时性能更优,通过这一步,系统将返回监听该端口的进程名称和PID,这种方法虽然步骤稍多,但能提供完整的连接上下文,包括远程IP信息,对于排查遭受DDoS攻击或异常外连的场景非常有效。
利用Pidstat分析进程历史传输数据
对于需要回顾过去一段时间内进程网络行为的情况,实时监控工具可能显得力不从心,Sysstat工具包中的pidstat便派上用场,Pidstat主要用于监控系统资源,包括CPU、内存和IO,但它同样具备监控网络数据的能力。

使用pidstat -d 1命令,可以每隔一秒输出一次所有进程的读写数据统计,这里的-d参数专门用于显示磁盘和IO相关的统计,但在较新的内核版本中,它也涵盖了部分网络活动指标,更精准的网络监控通常需要结合-d与-h(以易读格式显示)参数。pidstat的核心价值在于其脚本化能力,运维人员可以将输出重定向到日志文件,进行长期的数据收集和后续分析,从而找出非实时的、周期性的流量异常。
基于eBPF技术的高阶流量分析
随着Linux内核的演进,基于eBPF(扩展伯克利数据包过滤器)的工具为进程流量监控提供了全新的视角,传统的工具如Nethogs依赖读取/proc文件系统,这在高并发、海量连接的场景下可能会造成性能损耗,而eBPF工具在内核态运行,对系统性能的影响极小。
基于BCC(BPF Compiler Collection)的工具集如tcptracer或opensnoop等,可以追踪进程的TCP连接生命周期,虽然这些工具主要侧重于追踪连接建立和数据传输的细节,但通过编写自定义的eBPF程序,完全可以实现按进程聚合流量的功能。这代表了Linux性能监控的未来方向,特别是在容器化和云原生环境中,eBPF能够穿透命名空间的隔离,提供更全局的流量视野,对于追求极致性能和深度可观测性的专业运维团队,掌握eBPF工具是提升技术壁垒的关键。
运维实战中的最佳实践与建议
在实际的生产环境运维中,建议采用分层监控策略,对于日常巡检,Nethogs是最高效的工具,能够迅速响应“谁在占用带宽”的疑问,在进行故障排查时,需要结合Iftop查看对端信息,确认流量去向是正常的业务请求还是异常的数据外泄,监控不应仅局限于数值,更应关注趋势。
一个独立的见解是:流量监控必须结合系统负载分析,某个进程的流量绝对值并不大,但如果占满了网卡带宽,依然会导致业务延迟,在查看进程流量的同时,应关注网卡的利用率(如通过ethtool或sar命令),对于容器化环境,传统的Nethogs可能无法直接看到容器内部的进程,此时需要使用nsenter进入容器命名空间执行监控,或者使用支持容器的监控插件(如Netdata),建立一套从“发现异常”到“定位进程”再到“分析上下文”的标准化排查流程,是提升运维效率的核心。

相关问答
Q1:为什么Linux自带的top命令不能显示进程的网络流量?
A1: Linux内核在设计时,将网络流量统计归属于网络子系统(按网卡和Socket统计),而CPU和内存统计归属于进程调度子系统,Top命令主要通过读取/proc目录下的进程状态信息来获取CPU和内存使用率,而/proc文件系统中并没有直接提供按进程维度的网络流量计数器,Top命令无法直接显示网络流量,必须依赖读取内核网络表或使用eBPF等特定工具来获取这些数据。
Q2:在无法安装新软件的受限服务器上,如何查看进程流量?
A2: 在无法安装Nethogs等第三方工具的受限环境下,最有效的方法是使用/proc文件系统结合Shell脚本,虽然/proc没有直接的流量统计,但可以通过读取/proc/[pid]/net/tcp和/proc/[pid]/net/udp来获取进程打开的套接字信息(包括本地端口和inode),通过读取/proc/net/tcp来匹配inode,找到对应的套接字,再结合/proc/net/dev的网卡流量变化进行估算,这种方法非常复杂且不精确,通常建议直接使用系统自带的ss -tunlp配合cat /proc/net/dev进行粗略估算,或者使用sar -n DEV 1查看网卡整体流量,再通过lsof -i定位活跃进程。
能帮助您更好地掌握Linux进程流量监控技巧,如果您在日常运维中有独特的排查经验或遇到了棘手的网络问题,欢迎在评论区分享,我们一起探讨解决方案。


















