理解 linux (system) load average

-- TOC --

本文尝试总结自己对Linux中的load average这3个数字的理解,以及汇总相关信息。

获取load average值

以下是通过Linux命令行查看laod average的方法:

$ uptime
 10:24:09 up 3 days, 54 min,  2 users,  load average: 1.49, 0.36, 0.12
$ cat /proc/loadavg
0.51 0.30 0.16 1/709 53382
$ top
top - 10:31:33 up 3 days,  1:02,  2 users,  load average: 0.09, 0.03, 0.00
...

load average的3个数字的含义

传统load值的计算,仅包括running或runable状态的线程的统计,即load值表示对CPU的需求量,CPU load average。而Linux系统的load值,还包括了uninterruptible wait状态的线程,此时load值表示对系统资源的需求量,这里的系统资源包括CPU,硬盘,lock等,system load average。

These three numbers are the 1, 5, and 15 minute load averages. Except they aren't really averages, and they aren't 1, 5, and 15 minutes. As can be seen in the source above, 1, 5, and 15 minutes are constants used in an equation, which calculate exponentially-damped moving sums of a five second average. The resulting 1, 5, and 15 minute load averages reflect load well beyond 1, 5, and 15 minutes.

这3个数字是1分钟,5分钟,15分钟的load average,他们不是真的average,也不是真的这么多分钟!代码中对1,5,15的处理,只是3个constants,计算exponentially-damped moving sums of a five second average,5秒钟的数据的moving sum的指数衰减值。所有,这3个数字反应的load,并不是限定在N分钟范围内,而是一直在计算moving sum和指数衰减。

可以理解,1分钟衰减的最快,其次是5分钟,衰减最慢的是15分钟的load值。

如果一个idle系统,只跑一个CPU密集的线程,60秒之后,1分钟的load值是多少呢?如果是取平均值,此时的load值应该为1.0,但是不是的。请看下图:

load_average_experiment.png

1分钟的load值大约在0.62附近。

另一个现象是,load值增长的越慢,衰减的也越慢。

Linux为什么要将uninterruptible线程也包括进来?

The kernel only counts "runnable" processes when computing the load average. I don't like that; the problem is that processes which are swapping or waiting on "fast", i.e. noninterruptible, I/O, also consume resources. It seems somewhat nonintuitive that the load average goes down when you replace your fast swap disk with a slow swap disk...

当你更换一个慢速硬盘后,其它条件相同,此时的load值下降是反直觉的!这说的太好了...因此作者提交了一个patch,将uninterruptible线程也纳入计算。

对load average好坏的判断

整体上看,load值越大,即对系统资源的需求也越大。但大到多少就不好了呢?这并不能简单的判断。

由于load值包含了对很多系统资源的访问,以前的load/CPU_count的判断方法不再有效。此时的load值就成了一个相对值,如果load值为10的时候,系统工作稳定正常,那么当这个值增大到20的时候,你就需要去看看放生了什么,同时需要配合一些其它的量化指标,来整体判断系统的运行情况。比如看看CPU的占用率等。


参考:https://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html

本文链接:https://cs.pynote.net/sf/linux/sys/202302251/

-- EOF --

-- MORE --