在 Linux 系统中,可以通过 sar、iftop 和 nethogs 等工具查看 Linux 系统的网络流量指标。本文介绍如何使用这些工具来监测网络流量负载。
问题现象
使用 Linux 系统的 ECS 实例时,出现如下现象。
-
服务响应时长较长或出现访问超时等问题。
-
通过 ECS 控制台查看实例网络指标监控时,发现网络带宽使用率较高(参考值:当前网络流量带宽使用率>80%,可认为网络流量带宽使用率较高)。
-
收到网络流量带宽使用率超过设定阈值的告警信息。
排查步骤
使用 sar 工具查看网络接口指标
sar(System Activity Reporter 系统活动情况报告)是目前 Linux 平台上较为全面的系统性能分析工具之一,该工具可以从网络接口层面来分析数据包的收发情况、错误信息等。
使用介绍
使用 sar 来监控网络流量的命令格式如下。
sar -n DEV [interval] [count]
[interval]表示统计间隔,[count]表示统计次数。
使用示例
执行如下命令,使用 sar 每 1 秒统计一次网络接口的活动状况,连续统计 5 次。
sar -n DEV 1 5
命令执行后会列出每个网卡 5 次的平均数据取值,根据实际情况来确定带宽跑满的网卡名称。
回显结果示例如下,确认是 eth0 通过流量较大,然后执行以下步骤检查具体问题。
Linux 5.10.134-18.al8.x86_64 (iZbpxxxxxxxxxxxxxxxddkZ) 06/03/2025 _x86_64_ (4 CPU)
03:56:50 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
03:56:51 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:56:51 PM eth0 55312.00 19209.00 77155.90 1017.14 0.00 0.00 0.00 0.00
03:56:51 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
03:56:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:56:52 PM eth0 88057.00 30703.00 122923.18 1619.80 0.00 0.00 0.00 0.00
03:56:52 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
03:56:53 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:56:53 PM eth0 75517.00 21622.00 105336.02 1162.51 0.00 0.00 0.00 0.00
03:56:53 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
03:56:54 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:56:54 PM eth0 2.00 2.00 0.12 0.81 0.00 0.00 0.00 0.00
03:56:54 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
03:56:55 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:56:55 PM eth0 2.00 2.00 0.12 0.81 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 43778.00 14307.60 61083.07 760.21 0.00 0.00 0.00 0.00
显示结果主要字段说明
-
IFACE:网络接口名称。
-
rxpck/s、txpck/s:每秒接收或发送的数据包数量。
-
rxkB/s、txkB/s:每秒接收或发送的字节数,以 kB/s 为单位。
-
rxcmp/s、txcmp/s:每秒接收或发送的压缩过的数据包数量。
-
rxmcst/s:每秒接收到的多播数据包。
使用 iftop 工具查看主机或 IP 维度的网络接口指标
iftop 是 Linux 系统中一个免费的网卡实时流量监控工具,可以监控包括指定网卡的实时流量、端口连接信息、反向解析 IP 等信息。
使用介绍
iftop 常用命令格式如下。
sudo iftop [-i interface]
interface 表示网络接口名,比如 eth0、eth1 等。如果不通过-i 参数指定接口名,则默认检测第一块网卡的使用情况。
使用示例
-
执行如下命令,安装 iftop 流量监控工具。
Alibaba Cloud Linux/CentOS/Fedora
sudo yum install -y iftop
Ubuntu/Debian
sudo apt install -y iftop
-
执行如下命令,查看详细端口流量占用情况。
sudo iftop -i eth0 -P
说明-P 参数会显示请求端口。
-
(可选)使用 iftop 交互模式。
运行 iftop 命令后会进入交互模式,在交互模式下,您可以通过键盘与工具进行交互,具体操作说明如下。
-
回显结果说明。
运行 iftop 命令后,回显信息示例如下。
显示结果主要字段说明如下。
-
第①部分:带宽使用情况。
-
第②部分:外部连接列表,即记录了哪些 IP 正在和本机的网络连接。
-
右侧部分是实时流量信息,分别是该访问 IP 连接到本机 2 秒、10 秒和 40 秒的平均流量。
-
=>
表示发送数据,<=
表示接收数据。
-
-
第③部分。
-
第一列:TX 表示发送流量,RX 表示接收流量,TOTAL 表示总流量。
-
第二列 cum:表示第一列各种情况的总流量。
-
第三列 peak:表示第一列各种情况的流量峰值。
-
第四列 rates:表示第一列各种情况 2 秒、10 秒、40 秒内的平均流量。
-
-
-
执行如下命令,查看端口对应的进程。
sudo netstat -tunlp | grep [$Port]
说明[$Port]为上一步查看的端口。
系统显示类型如下。
tcp 0 0 127.0.0.1:59000 0.0.0.0:* LISTEN 2598/rapt-daemon
-
确认对应服务后,您可以通过停止服务或使用
iptables
工具来对指定地址进行屏蔽或限速,以保证服务器带宽能够正常使用。
使用 Nethogs 工具查看进程维度的网络指标
Nethogs 是一款开源的网络流量监控工具,可用于显示每个进程的带宽占用情况。这样可以更直观定位异常流量的来源。Nethogs 支持 IPv4 和 IPv6 协议,支持本地网卡及 PPP 连接。
使用介绍
常见用法如下。
sudo nethogs [-i interface]
interface 表示网络接口名,比如 eth0、eth1 等。如果不通过-i 参数指定接口名,则默认检测第一块网卡的使用情况。
使用示例
-
执行如下命令,安装 nethogs 流量监控工具。
Alibaba Cloud Linux/CentOS/Fedora
sudo yum install -y nethogs
Ubuntu/Debian
sudo apt install -y nethogs
-
执行如下命令,查看网卡上进程级的流量信息。
sudo nethogs eth0
说明nethogs 默认的监控间隔是 1 秒,您可以通过-d 参数来设定监控间隔。例如执行如下
sudo nethogs eth0 -d 5
命令,设定监控间隔为 5 秒。回显结果示例如下。
NetHogs version 0.8.5 PID USER PROGRAM DEV SENT RECEIVED 1916 root wget eth0 709.601 59693.820 KB/sec ? root 172.16.0.161:55872-100.100.45.106:443 0.295 1.083 KB/sec 1543 root /usr/local/aegis/aegis_client/aegis_12_45/AliYunDun eth0 2.175 0.105 KB/sec 1031 root /usr/local/share/aliyun-assist/2.2.3.857/aliyun-service eth0 0.257 0.077 KB/sec ? root 172.16.0.161:55866-100.100.45.106:443 0.000 0.000 KB/sec 899 root /usr/local/cloudmonitor/bin/argusagent eth0 0.000 0.000 KB/sec ? root 172.16.0.161:33352-100.100.45.106:80 0.000 0.000 KB/sec ? root 172.16.0.161:36192-100.100.154.78:80 0.000 0.000 KB/sec ? root 172.16.0.161:37998-100.100.45.186:80 0.000 0.000 KB/sec 1708 root /usr/local/aegis/alihips/AliHips eth0 0.000 0.000 KB/sec ? root unknown TCP 0.000 0.000 KB/sec TOTAL 712.071 59695.085 KB/sec
回显结果说明如下:
在 nethogs 监控界面,按
s
可以按照 Sent 列进行排序,按 r 可以按照 Received 列进行排序,按m
可以切换不同的统计单位显示,例如 kb/s、kb、b、mb。监控界面信息说明如下所示。-
PID 列表示相应流量关联程序的进程号。
-
USER 列表示相应进程的所属用户。
-
PROGRAM 列表示程序的具体执行路径。
-
DEV 列当前监控的网络接口名称。
-
Sent 列表示相应进程已经发送的数据流量。
-
Received 列表示程序已经接收的数据流量。
-
-
若确定进程是恶意程序,可以通过执行如下命令,终止进程。
kill -TERM [$Port1]
说明如果是 Web 服务程序,您可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量。日志分析可以使用 logwatch 或 awstats 等工具进行。
处理网络带宽使用率较高问题
常见网络带宽使用率较高问题的原因及解决方案如下。
问题现象 |
原因 |
解决方案 |
异常用户程序或进程长时间占用大量网络资源,或者非法 IP 地址恶意访问服务,从而导致网络负载较高。 |
该程序为异常程序或进程,运行时占用过多网络资源。 |
|
正常用户程序或进程长时间占用大量网络资源,或者有指定 IP 地址访问服务,从而导致网络负载较高。 |
该程序为正常业务程序或进程,运行时占用过多网络资源。 |
如果实例出现网络性能瓶颈,您可以结合实际情况选择相应的处理策略。
|
单个业务程序或进程偶发网络资源占用较高,但持续时间较短,且发生频率较低。 |
业务程序需要优化,以解决特殊业务场景(大文件上传、下载)触发的网络资源占用过高问题。 |
优化业务程序。 |
没有单个程序或进程占用网络资源,但整体网络负载较高。 |
当前实例的服务正常运行所需网络资源性能大于实例的网络带宽。 |
如果实例出现网络性能瓶颈,您可以选择升级带宽 。 相关操作,请参见 修改带宽配置 。 |
相关文档
-
关于 Windows 系统网络带宽使用率较高的问题排查及解决方案,请参见 Windows 实例中带宽使用率较高问题的排查及解决方法 。
-
如果需要提前采集网络指标以便分析异常,您可以使用 atop 工具。相关内容,请参见 使用 atop 工具监控 Linux 系统指标 。