本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
在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系统指标。