商城首页欢迎来到中国正版软件门户

您的位置:首页 >Linux怎么监控系统流量使用情况 Linux网络抓包工具使用详解

Linux怎么监控系统流量使用情况 Linux网络抓包工具使用详解

  发布于2026-05-01 阅读(0)

扫一扫,手机访问

Linux网络流量监控与抓包:工具定位与实战避坑指南

Linux怎么监控系统流量使用情况 Linux网络抓包工具使用详解

开门见山,先说结论:监控实时带宽用 iftop,排查具体进程占用用 nethogs,进行原始数据包深度分析则用 tcpdump。这三者各司其职,定位清晰,如果混用或者用错了场景,很容易得出错误的判断。

iftop:实时接口流量的观察者,但默认不关联进程

iftop 的核心原理是监听网卡的数据包,并通过 libpcap 库进行实时汇总统计。这意味着它能快速、直观地展示IP或端口级别的实时吞吐速率,但它天生就“看”不到背后的进程ID或进程名。这里有个常见的误解:以为加上 -p 参数就能看到进程。其实不然,那个 -p 指的是“混杂模式”,跟进程毫无关系。

  • 权限是前提:运行必须加上 sudo,否则会遭遇 socket: Operation not permitted 错误。
  • 关闭DNS解析:使用 -n 参数,可以避免额外的DNS查询拖慢工具响应速度,甚至干扰流量统计的准确性。
  • 显示端口号:使用 -P(大写)参数,会显示具体的端口号(如 :443),而不是服务名称(如 :https),信息更直接。
  • 过滤技巧:如果想只监控特定网段,可以使用 -F 192.168.1.0/24。但要注意,iftop 本身不支持按端口过滤,如果需要锁定某个端口的流量,通常需要先用 tcpdump 过滤抓包,再将文件交给 iftop 或其它工具分析。

nethogs:进程维度的流量追踪器,但视野限于本机

nethogs 的独特价值在于,它能将网络流量直接绑定到具体的 pidcommand 上。这对于排查“哪个进程在偷偷上传/下载”这类问题非常高效。不过,它并不对所有网卡流量进行聚合统计,而是显示每个活跃进程的实时速率,也无法像 iftop 那样按照连接对流量进行排序。

  • 权限问题再现:安装后首次运行如果提示 Unable to open /dev/tty,这通常是因为没用 sudo,请直接使用 sudo nethogs
  • 指定监控接口:默认监听第一个非回环接口,要指定具体网卡,命令如 sudo nethogs eth0
  • 交互操作:运行时,按 m 键可以循环切换速率显示单位(KB/s, KB, B),按 r 键可以反向排序,按 q 键退出。
  • 缺乏历史记录:它本身不记录历史数据,也不支持保存日志。如果需要留存记录,可以尝试通过重定向输出实现,例如:sudo nethogs -t eth0 > /tmp/nethogs.log 2>&1

tcpdump:原始数据包诊断专家,生产环境需慎用

必须明确,tcpdump 并非实时监控工具,而是一个强大的诊断工具。它直接输出原始字节流,不进行任何聚合或美化。如果无节制地抓包,很容易刷爆终端屏幕,甚至因为巨大的IO操作拖慢系统或撑满磁盘。因此,关键在于学会使用过滤器精准缩小范围,切忌“先抓了再说”。

  • 经典组合命令sudo tcpdump -i eth0 -nn -c 100 port 443。这个命令只抓取100个发往或来自443端口(HTTPS)的包,-nn 避免了域名和端口名解析,效率更高。
  • 控制抓包体积:使用 -s 96 参数可以截断数据包(只抓取每个包的前96字节),这对于分析TCP头部和HTTP头部信息通常已经足够,能显著减小文件大小。
  • 保存与分析分离:使用 -w /tmp/out.pcap 将抓取的包保存为文件,然后下载到本地用 Wireshark 等图形化工具进行深入分析。尽量避免在服务器上直接使用 -A 参数以ASCII形式打印包内容,这极易导致刷屏甚至失去连接。
  • 精准诊断:如果目标是排查TCP连接问题(如丢包、重传),可以针对性抓取相关标志位的数据包,例如:tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst|tcp-syn) != 0',这比无差别全抓要高效得多。

别忘了底层:网卡状态与统计采样粒度

需要警惕的是,上述所有工具的数据都依赖于内核提供的统计信息。而底层网卡驱动的特性或卸载功能(如LRO/GRO)可能会影响统计结果的实时性和准确性。举个例子,iftop 显示接收流量突然飙升,但查看 /proc/net/dev 里对应接口的字节计数却变化不大,这很可能是GRO(通用接收卸载)合并了数据包,导致统计出现了延迟。

  • 验证基准:要确认真实的吞吐量,最可靠的是查看 cat /proc/net/dev 中的原始字节计数,这是内核最底层的计数器。
  • 稳定与实时的权衡:像 vnstat 这类工具,其数据库是基于对 /proc/net/dev 的定时采样生成的,因此它的数据比 iftop 更稳定,能反映趋势,但实时性就相对较弱。
  • 容器环境差异:在容器环境中,docker statspodman top 看到的网络数据来源于cgroup的 net_cls 控制器统计,这与宿主机上通过 iftop 看到的、经过完整网络栈的流量数值可能存在差异,因为统计的路径和节点不同。
本文转载于:https://www.php.cn/faq/2400142.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注