0%

平均负载

到底应该怎么理解“平均负载”?


概念

什么是平均负载?

正确定义: 单位时间内,系统处于可运行状态不可中断状态的平均进程数,也就是平均活跃进程数

先解释下,可运行状态和不可中断状态

可运行状态的进程: 正在使用 CPU 或者正在等待 CPU 的进程,即 ps aux 命令下STAT处于R状态(Running 或 Runnable)的进程
不可中断状态的进程: 正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如常见是等待硬件设备的 I/O 响应。也就是我们在Ps 命令看到的D状态(Uninterruptible Sleep,也称为 Disk Sleep)的进

比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时间的进程就处于不可中断状态。如果此时的进程被打断,就容易出现磁盘数据与进程数据不一致的问题。

所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制

因此,可以简单理解为,平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。

理想状态: 每个cpu上都有一个活跃进程,即平均负载数等于 cpu 数
过载经验值: 平均负载高于 cpu 数量70%的时候

为什么是 CPU 数量的70%呢? 请阅读Linux系统平均负载3个数字的含义

类比的形象理解可以阅读性能基础之理解Linux系统平均负载和CPU使用率

相关命令

1
CPU 核数: lscpu、 grep 'model name' /proc/cpuinfo | wc -l

显示平均负载: uptime、top,显示的顺序是最近1分钟、5分钟、15分钟,从此可以看出平均负载的趋势

1
2
[root@massive-dataset-new-002 ~]# uptime
20:36:29 up 202 days, 1:32, 1 user, load average: 0.00, 0.00, 0.00

分别是当前时间、系统运行时间以及正在登录用户数、依次则是过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)

查看 cpu 负载变化的命令

1
watch -d uptime  # -d 会高亮显示变化的区域

mpstat: 多核cpu性能分析工具,-P ALL监视所有cpu

pidstat: 进程性能分析工具,-u 显示cpu利用率

平均负载与cpu使用率的区别

CPU使用率: 单位时间内cpu繁忙情况的统计

  • CPU密集型进程,CPU使用率和平均负载基本一致

  • IO密集型进程,平均负载升高,CPU使用率不一定升高

  • 大量等待CPU的进程调度,平均负载升高,CPU使用率也升高

惯例

系统过载并超过1.0的负载值有时不是问题,因为即使有一些延迟,CPU也会处理队列中的作业,负载将再次降低到1.0以下的值。但是如果系统的持续负载值大于1,则意味着它无法吸收执行中的所有负载,因此其响应时间将增加,系统将变得缓慢且无响应。高于1的高值,尤其是最后5分钟和15分钟的负载平均值是一个明显的症状,要么我们需要改进计算机的硬件,通过限制用户可以对系统的使用来节省更少的资源,或者除以多个相似节点之间的负载。

因此,我们提出以下建议:

  • >=0.70:没有任何反应,但有必要监控 CPU 负载。如果在一段时间内保持这种状态,就必须在事情变得更糟之前进行调查。
  • >=1.00:存在问题,您必须找到并修复它,否则系统负载的主要高峰将导致您的应用程序变慢或无响应。
  • >=3.00:你的系统变得 非常慢。甚至很难从命令行操作它来试图找出问题的原因,因此修复问题需要的时间比我们之前采取的行动要长。你冒的风险是系统会更饱和并且肯定会崩溃。
  • >=5.00:你可能无法恢复系统。你可以等待奇迹自发降低负载,或者如果你知道发生了什么并且可以负担得起,你可以在控制台中启动 kill -9 之类的命令 ,并祈求它运行在某些时候,以减轻系统负荷并重新获得其控制权。否则,你肯定别无选择,只能重新启动计算机。

调优

平均负载过高时,如何调优

调优的思路无非就是找到导致平均负载高进程,在对相应的进程进行处理

sysstat,yum 即可安装

  1. CPU密集型进程
    mpstat -P ALL 5: -P ALL表示监控所有CPU,5表示每5秒刷新一次数据,观察是否有某个cpu的%usr会很高,但%iowait应很低
    pidstat -u 5 1:每5秒输出一组数据,观察哪个进程%cpu很高,但是%wait很低,极有可能就是这个进程导致cpu飚高

  2. IO密集型进程
    mpstat -P ALL 5: 观察是否有某个cpu的%iowait很高,同时%usr也较高(比大多数的高,但是又不是特别高),这说明,平均负载的升高是由于 iowait 的升高。
    pidstat -u 5 1:观察哪个进程的各项数值比其他的高

  3. 大量进程
    pidstat -u 5 1:观察那些%wait较高的进程是否有很多, %wait 列就是每个进程等待 CPU 的时间

注意因为centos 自带的sysstat版本低,没有%wait这一列,所以需要升级为11.5.5。

升级步骤请参sysstat安装升级


参考链接