0%

Linux负载高排查

Load Average(负载平均值)是一个用于衡量系统负载的指标,它表示一段时间内处于活跃状态的进程数目。理想情况下,负载值应该小于系统的CPU核心数,但具体的适宜值取决于系统的用途和配置。

一、基础

      Load Average(负载平均值)是一个用于衡量系统负载的指标,它表示一段时间内处于活跃状态的进程数目。Load Average通常用三个值来表示(如top/uptime命令),分别对应于过去1分钟、5分钟和15分钟的平均值。需要注意的是,Load Average并不仅仅表示CPU的利用率,它还包括了等待I/O、网络等资源的进程。因此,即使CPU利用率并不高,Load Average仍然可能较高,这可能是因为其他资源的限制导致的。

  • 负载平均值小于CPU核心数:表示系统目前相对空闲,进程在几乎没有等待CPU资源。
  • 负载平均值接近或超过CPU核心数:表示系统处于较高的负载状态,进程可能需要等待CPU资源。
  • 负载平均值大幅度增加:可能表示系统资源不足,需要进一步调查和优化。

负载高判断标准:以1个CPU为例,几核满负载就是几,一般情况下我们以满负载*0.7作为高负载的临界值。

  1. CPU高:使用top命令来判断CPU是否高,如:
1
2
3
4
5
top - 14:07:56 up 31 days, 18:53,  1 user,  load average: 0.53, 1.01, 1.17
Tasks: 409 total, 1 running, 407 sleeping, 0 stopped, 1 zombie
%Cpu(s): 9.3 us, 4.8 sy, 0.0 ni, 85.6 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 16265872 total, 304432 free, 11046344 used, 4915096 buff/cache
KiB Swap: 4194300 total, 915820 free, 3278480 used. 4160012 avail Mem

%Cpu(s)行各个值含义:

  • us:表示用户空间程序的CPU使用率
  • sy:表示系统空间程序的CPU使用率
  • ni:表示用于nice操作的CPU使用率
  • id:表示CPU空闲的百分比
  • wa:表示CPU等待I/O的百分比
  • hi:表示硬中断的百分比
  • si:表示软中断的百分比
  • st:表示被偷取(被虚拟化宿主抢占)的时间百分比。

CPU总和 = 100% = us + sy + ni + id + wa + hi + si + st

us和sy的值较高即表示系统的CPU使用率就相对较高

  1. 内存高:使用topfree -h命令都可以查看到内存的使用情况,以free -h为例,各个指标含义:
    • total(总内存):表示系统上总共的内存量,包括物理内存和交换空间。
    • used(已用内存):表示当前系统正在使用的内存量,包括正在使用的物理内存和交换空间。
    • free(空闲内存):表示当前系统未被使用的内存量,即尚未分配给任何进程的内存。
    • shared(共享内存):表示被多个进程共享的内存量。
    • buff/cache(缓存和缓冲区):表示被用作文件系统缓存和缓冲区的内存量。这部分内存实际上是空闲的,如果系统需要,可以很容易地被释放。
    • available(可用内存):表示系统当前可用的内存量,包括空闲内存和缓存。

如果已用内存接近或超过总内存的一定比例,或空闲内存非常低,示系统内存资源紧张。

  1. IO高

    • 使用iostat命令: iostat 命令是 sysstat 包的一部分,用于显示CPU、内存和磁盘I/O的统计信息。在终端中运行以下命令:iostat
      • iostat 会显示每个磁盘的平均读写速率、响应时间等信息。可以通过 iostat -d 仅显示磁盘相关的信息。
    • 使用iotop命令: iotop 是一个交互式的工具,可以显示磁盘I/O活动的实时信息,以及各个进程对磁盘的使用情况。运行以下命令:iotop
      • iotop 的输出按磁盘I/O使用率排序,可以方便地找到占用I/O资源较多的进程。
    • 使用vmstat命令: vmstat 命令可以显示虚拟内存的统计信息,包括磁盘I/O情况。运行以下命令:vmstat 1
      • vmstat 每秒输出一次系统统计信息,其中 bi 表示块(block)输入,bo 表示块输出,用于表示磁盘I/O活动。
    • 使用sar命令: sar 命令是 sysstat 包中的另一个工具,可以提供关于系统性能的历史数据。运行以下命令:sar -d 1
      • sar -d 会显示磁盘活动的统计数据,包括读写速率、I/O等待时间等。
  2. 可能导致负载高的因素

因素 现象 原因
CPU密集型任务 高用户和系统CPU使用率 系统正在执行需要大量计算资源的任务
内存不足 高交换空间使用率、高磁盘IO 系统开始使用交换空间,因为物理内存不足
IO密集型任务 高磁盘IO或网络IO 系统中的任务频繁进行文件读写、数据库查询或网络通信
进程调度问题 多个进程争夺CPU时间,导致CPU使用率波动 系统调度算法不合理,导致进程无法有效地共享CPU资源
多核心处理器不平衡 部分CPU核心负载高,而其他核心相对空闲 任务无法充分利用所有可用的CPU核心
大量进程或线程 高进程数或线程数 系统同时运行了大量的进程或线程
不合理的系统配置 异常的系统日志、性能参数不合理 内核参数设置、日志记录、网络配置等不合理
恶意软件或攻击 异常的网络流量、未知进程或服务 恶意软件或攻击占用系统资源
系统故障或硬件故障 系统错误消息、硬件故障日志 可能有硬件故障、磁盘损坏或其他系统故障
存在D状态进程 CPU很空闲,但是load average却非常高 D状态是指不可中断的睡眠状态,该状态的进程无法被kill,也无法自行退出
  1. 常用命令
    • top
    • vmstat
    • iotop
    • free
    • ps

二、实战

TODO

三、参考

  1. 参考一
  2. 参考二