服务器测评网
我们一直在努力

Linux如何查看进程流量?Linux查看进程实时流量命令

在Linux服务器运维管理中,快速定位并分析占用网络带宽的异常进程是保障系统稳定性和业务连续性的核心技能。核心上文归纳是:传统的top或htop命令仅能监控CPU和内存资源,无法直接显示网络流量;要精准查看进程流量,必须使用nethogs等专用工具,或通过iftop结合lsof/ss命令进行关联分析,才能实现从流量异常到进程定位的闭环排查。

Linux如何查看进程流量?Linux查看进程实时流量命令

传统监控工具的局限性分析

许多系统管理员在排查流量问题时,习惯性地首先使用top命令,这是一个常见的误区。tophtop虽然能实时展示系统中各个进程对CPU、内存、时间片等资源的占用情况,但它们的设计初衷并不包含网络I/O监控,当服务器出现带宽跑满、网卡拥塞的情况时,在top的输出结果中往往看不到明显的CPU或内存飙升,导致排查方向陷入僵局。

要解决这个问题,必须转向专门针对网络协议栈和文件描述符进行监控的工具链,Linux下查看进程流量的方案主要分为两类:一类是直接按进程维度统计流量的工具(如nethogs),另一类是按端口或连接维度统计流量再反查进程的工具(如iftop配合lsof)。

按进程监控流量的首选工具:Nethogs

在众多网络监控工具中,Nethogs是针对“查看进程流量”这一需求最精准、最直观的解决方案,与大多数按协议或端口划分流量的工具不同,Nethogs直接按进程(Process)对流量进行分组,能够清晰地展示每个进程正在发送和接收的数据量。

Nethogs的核心优势在于其逆向思维展示:它不关注IP地址,而是关注“是谁在发送流量”。

  • 安装与使用:在CentOS/RHEL下可通过yum install nethogs安装,在Ubuntu/Debian下可通过apt install nethogs安装,执行时需要root权限,命令为sudo nethogs
  • 参数详解
    • 默认模式下,Nethogs会列出所有网卡及其对应的进程流量。
    • 使用-t参数可以开启trace模式,只显示活跃的连接,避免屏幕被大量静止的进程刷屏。
    • 使用-d seconds参数可以指定刷新间隔,例如nethogs -d 5表示每5秒刷新一次。
  • 输出解读:输出界面主要包含SENT、RECEIVED两列,分别代表发送和接收的流量,管理员可以通过这两列数据迅速判断出是上传流量(如数据备份、DDoS攻击)还是下载流量(如恶意拉取文件)占用了带宽,一旦发现异常PID,可以直接记录并进行后续处理。

按连接监控流量的利器:Iftop

虽然Nethogs擅长定位进程,但在某些无法安装新软件的受限环境中,或者需要分析具体通信方向(即流量去向哪个IP)时,Iftop是不可或缺的补充工具,Iftop类似于网络版的top,它主要监控网卡上的实时流量,并按连接(Socket)进行展示。

Linux如何查看进程流量?Linux查看进程实时流量命令

  • 使用场景:当你发现服务器流量异常,但不确定是在和哪个外部IP通信时,Iftop能提供最直观的视图。
  • 核心功能:Iftop会列出当前所有建立的网络连接,中间的箭头=><=表示流量方向,右侧显示的是具体的IP地址和端口。
  • 结合Lsof定位进程:Iftop本身不显示进程名,但通过它可以看到占用流量最大的端口号,发现目标端口为12345的连接流量巨大,此时可以使用命令lsof -i :12345netstat -tunlp | grep 12345,即可立即查找到占用该端口的进程PID和名称,这种“iftop看端口 -> lsof找进程”的组合拳,是Linux运维中最经典且可靠的排查逻辑。

无外网环境下的原生排查方案

在生产环境中,有时受限于安全策略,无法随意安装Nethogs或Iftop,利用Linux原生的/proc文件系统和ss命令进行统计,是体现专业能力的进阶手段。

虽然Linux内核没有直接提供“按进程查流量”的接口,但我们可以通过读取/proc/[pid]/net/dev来获取特定进程的网络统计信息,这种方法计算复杂且不够实时,更实用的原生方案是使用ss命令。

ss(Socket Statistics)是netstat的现代替代品,速度更快且信息更详细,使用ss -tup可以列出所有TCP/UDP连接及其关联的进程信息,虽然ss不直接显示流量速率,但可以通过查看Recv-Q(接收队列)和Send-Q(发送队列)的数据堆积情况,侧面推断流量压力,如果某个进程的Send-Q长期堆积,说明发送速率超过了网卡处理能力或对方处理能力,该进程极有可能是流量洪水的源头。

综合排查实战案例与最佳实践

为了构建一套符合E-E-A-T原则的专业解决方案,建议在实际操作中遵循以下排查流程:

  1. 宏观感知:首先使用iftopnload查看网卡总流量,确认是否存在拥塞。
  2. 微观定位
    • 如果环境允许,直接运行nethogs,按SENT或RECECEIVED列排序,瞬间锁定排名第一的进程PID。
    • 如果环境受限,使用iftop锁定高流量端口,再通过lsof -i :端口定位PID。
  3. 决策与处置:确认PID后,使用ps -fp <PID>查看完整启动命令和用户,如果是业务进程异常,可重启服务;如果是恶意进程(如挖矿木马),需立即kill <PID>并检查定时任务和启动项以清理残留。

特别提示:在排查过程中要注意区分“流量”与“包量(PPS)”,有些DDoS攻击是通过发送大量小包实现的,此时流量(Bytes)可能不高,但PPS极高,导致CPU软中断飙升,这种情况下,单纯看流量工具可能无法发现问题,需要结合sar -n DEV 1查看PPS数据。

Linux如何查看进程流量?Linux查看进程实时流量命令

相关问答

Q1:为什么在使用nethogs时显示的流量总和与iftop看到的网卡总流量不一致?
A1: 这种差异通常由两个原因造成,nethogs是按进程进行统计的,它主要捕获通过用户态进程处理的流量,可能无法统计到由内核直接处理的流量(如某些Keepalive包或ARP包),iftop统计的是二层/三层网卡上的原始流量,包含了以太网帧头和IP头开销,而nethogs更关注应用层的数据吞吐,在排查时,应以iftop的总流量为基准,nethogs主要用于定位相对占比最高的进程。

Q2:除了nethogs,还有哪些工具可以按进程监控网络IO?
A2: 除了nethogs,netdata是一个功能强大的实时监控工具,它可以通过Web界面展示每个进程的详细网络I/O。atop(需开启网络采集模块)也是一个很好的选择,它不仅能记录历史数据,还能在日志回放时查看当时的进程网络状况,对于容器化环境,cadvisor也是监控容器进程流量的标准工具。

互动

如果您在Linux服务器流量排查中遇到过特殊的疑难杂症,或者有自己独到的命令组合技巧,欢迎在评论区分享您的实战经验,让我们一起探讨更高效的运维方案。

赞(0)
未经允许不得转载:好主机测评网 » Linux如何查看进程流量?Linux查看进程实时流量命令