Linux实例网络带宽使用率较高问题的排查与处理

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

Linux系统中,可以通过sar、iftopnethogs等工具查看Linux系统的网络流量指标。本文介绍如何使用这些工具来监测网络流量负载。

问题现象

使用 Linux 系统的ECS实例时,出现如下现象。

  • 服务响应时长较长或出现访问超时等问题。

  • 通过ECS控制台查看实例网络指标监控时,发现网络带宽使用率较高(参考值:当前网络流量带宽使用率>80%,可认为网络流量带宽使用率较高)。

  • 收到网络流量带宽使用率超过设定阈值的告警信息。

排查步骤

使用sar工具查看网络接口指标

sar(System Activity Reporter系统活动情况报告)是目前Linux平台上较为全面的系统性能分析工具之一,该工具可以从网络接口层面来分析数据包的收发情况、错误信息等。

使用介绍

使用sar来监控网络流量的命令格式如下。

sar -n DEV [interval] [count]
说明

[interval]表示统计间隔,[count]表示统计次数。

使用示例

执行如下命令,使用sar1秒统计一次网络接口的活动状况,连续统计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维度的网络接口指标

iftopLinux系统中一个免费的网卡实时流量监控工具,可以监控包括指定网卡的实时流量、端口连接信息、反向解析IP等信息。

使用介绍

iftop常用命令格式如下。

sudo iftop [-i interface]

interface表示网络接口名,比如eth0、eth1等。如果不通过-i参数指定接口名,则默认检测第一块网卡的使用情况。

使用示例

  1. 使用Workbench终端连接登录Linux实例(SSH)

  2. 执行如下命令,安装iftop流量监控工具。

    Alibaba Cloud Linux/CentOS/Fedora

    sudo yum install -y iftop

    Ubuntu/Debian

    sudo apt install -y iftop
  3. 执行如下命令,查看详细端口流量占用情况。

    sudo iftop -i eth0 -P
    说明

    -P参数会显示请求端口。

  4. (可选)使用iftop交互模式。

    运行iftop命令后会进入交互模式,在交互模式下,您可以通过键盘与工具进行交互,具体操作说明如下。

    常见交互操作命令说明

    按键

    说明

    h

    切换是否显示帮助。

    n

    切换显示本机的IP或主机名。

    s

    切换是否显示本机的host信息。

    d

    切换是否显示远端目标主机的host信息。

    t

    切换显示格式为2行、1行、只显示发送流量或只显示接收流量。

    N

    切换显示端口号或端口服务名称。

    S

    切换是否显示本机的端口信息。

    D

    切换是否显示远端目标主机的端口信息。

    p

    切换是否显示端口信息。

    P

    切换暂停或继续显示。

    b

    切换是否显示平均流量图形条。

    B

    切换计算2秒或10秒或40秒内的平均流量。

    T

    切换是否显示每个连接的总流量。

    i

    打开屏幕过滤功能,输入要过滤的字符。比如输入相应IP地址,回车后,屏幕就只显示这个IP相关的流量信息。

    L

    切换显示画面上边的刻度,刻度不同,流量图形条会有变化。

    jk

    向上或向下滚动屏幕显示的连接记录。

    123

    根据右侧显示的三列流量数据进行排序。

    <

    根据左边的本机名或IP排序。

    >

    根据远端目标主机的主机名或IP排序。

    o

    切换是否固定只显示当前的连接。

    f

    编辑过滤代码。

    !

    调用Shell命令。

    q

    退出。

  5. 回显结果说明。

    运行iftop命令后,回显信息示例如下。

    2023-02-26_19-30-35

    显示结果主要字段说明如下。

    • 第①部分:带宽使用情况。

    • 第②部分:外部连接列表,即记录了哪些IP正在和本机的网络连接。

      • 右侧部分是实时流量信息,分别是该访问IP连接到本机2秒、10秒和40秒的平均流量。

      • =>表示发送数据,<=表示接收数据。

    • 第③部分。

      • 第一列:TX表示发送流量,RX表示接收流量,TOTAL表示总流量。

      • 第二列cum:表示第一列各种情况的总流量。

      • 第三列peak:表示第一列各种情况的流量峰值。

      • 第四列rates:表示第一列各种情况2秒、10秒、40秒内的平均流量。

  6. 执行如下命令,查看端口对应的进程。

    sudo netstat -tunlp | grep [$Port]
    说明

    [$Port]为上一步查看的端口。

    系统显示类型如下。

    tcp        0      0 127.0.0.1:59000         0.0.0.0:*               LISTEN      2598/rapt-daemon
  7. 确认对应服务后,您可以通过停止服务或使用iptables工具来对指定地址进行屏蔽或限速,以保证服务器带宽能够正常使用。

使用Nethogs工具查看进程维度的网络指标

Nethogs是一款开源的网络流量监控工具,可用于显示每个进程的带宽占用情况。这样可以更直观定位异常流量的来源。Nethogs支持IPv4IPv6协议,支持本地网卡及PPP连接。

使用介绍

常见用法如下。

sudo nethogs [-i interface]

interface表示网络接口名,比如eth0、eth1等。如果不通过-i参数指定接口名,则默认检测第一块网卡的使用情况。

使用示例

  1. 使用Workbench终端连接登录Linux实例(SSH)

  2. 执行如下命令,安装nethogs流量监控工具。

    Alibaba Cloud Linux/CentOS/Fedora

    sudo yum install -y nethogs

    Ubuntu/Debian

    sudo apt install -y nethogs
  3. 执行如下命令,查看网卡上进程级的流量信息。

    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列表示程序已经接收的数据流量。

  4. 若确定进程是恶意程序,可以通过执行如下命令,终止进程。

    kill -TERM [$Port1]
    说明

    如果是Web服务程序,您可以使用iftop等工具来查询具体IP来源,然后分析Web访问日志是否为正常流量。日志分析可以使用logwatchawstats等工具进行。

处理网络带宽使用率较高问题

常见网络带宽使用率较高问题的原因及解决方案如下。

问题现象

原因

解决方案

异常用户程序或进程长时间占用大量网络资源,或者非法IP地址恶意访问服务,从而导致网络负载较高。

该程序为异常程序或进程,运行时占用过多网络资源。

  • 通过在Nethogs工具定位到占用网络资源较多的程序的PID,并通过如下方式结束进程。

    警告

    在您结束进程前,请务必确保您了解该进程的相关信息,避免因误操作导致您的业务中断。

    通过sudo kill -15 <PID>来结束该进程。

  • 使用安全组对非法IP地址访问进行拦截,相关操作,请参见管理安全组规则

  • 如果怀疑进程为恶意程序,您可以对其进行查杀,相关操作,请参见病毒查杀

正常用户程序或进程长时间占用大量网络资源,或者有指定IP地址访问服务,从而导致网络负载较高。

该程序为正常业务程序或进程,运行时占用过多网络资源。

如果实例出现网络性能瓶颈,您可以结合实际情况选择相应的处理策略。

  • 升级实例带宽相关操作,请参见修改带宽配置

  • 借助iptables工具对指定IP或协议的网络请求速率进行限制。

  • 优化业务程序。

单个业务程序或进程偶发网络资源占用较高,但持续时间较短,且发生频率较低。

业务程序需要优化,以解决特殊业务场景(大文件上传、下载)触发的网络资源占用过高问题。

优化业务程序。

没有单个程序或进程占用网络资源,但整体网络负载较高。

当前实例的服务正常运行所需网络资源性能大于实例的网络带宽。

如果实例出现网络性能瓶颈,您可以选择升级带宽相关操作,请参见修改带宽配置

相关文档