「Linux」- 平均负载(Load Average)

更新日期:2020年03月06日

在使用top命令或者uptime命令时:

# uptime 
 23:47:36 up 5 days,  2:13,  5 users,  load average: 0.99, 0.66, 0.55

# top
top - 23:47:53 up 5 days,  2:13,  5 users,  load average: 1.01, 0.67, 0.55
...

都会输出一个load average字段。

理解「系统负载」与「平均负载」

「系统负载」展示了系统的CPU、磁盘、其他资源的繁忙程度。「系统负载」是操作系统「执行计算工作」的度量。以数字形式显示。如果计算机完全空闲,则「系统负载」为「0」。每个等待CPU资源或正在使用CPU资源的进程都会向「系统负载」加「1」。如果「系统负载」为「5」,则表示由五个进程在使用CPU或者等待CPU资源。(注意,UNIX系统通常只计算等待CPU的进程,而Linux还会计算其他的资源(比如等待磁盘的读写))

「平均负载」则是「系统负载」在一段时间内的平均值。

「系统负载」通常没有太大的含义:因为它在这一秒为零,那么下一秒可能为五,因为那时可能有五个进程在等待资源。这也是为什么在UNIX系统中显示的是一段时间内的「平均负载」,而不是「系统负载」。

在Linux中,技术上认为「平均负载」是其(内核)执行队列中标记为“正在运行”或“不可中断”的进程的运行平均值。

几乎所有类Unix系统都只计算运行或等待状态的进程。但在Linux中,它包括处于不间断睡眠状态的进程;那些等待其他系统资源的进程,比如磁盘I/O等。

查看「平均负载」

使用uptime命令来查看负载。

也可以通过文件系统查看:watch -n 1 cat /proc/loadavg

理解「平均负载」输出

「平均负载」一般是三个值,形如:load average: 0.99, 0.66, 0.55

从左到又分别表示:当前系统在一分钟,五分钟,十五分钟内的平均负载。

理解「平均负载」具体含义

# 如果CPU是单核的

我们以load average: 1.05, 0.70, 5.09为例。假如你的CPU是单核的:

在过去的一分钟:机器平均超载0.05个,就是说平均有0.05个进程在等待CPU资源。

在过去的五分钟:机器平均负载0.70个,有0.03的时间CPU处于空闲。

在过去的一刻钟:机器平均超载4.09个,平均有4.09个进程在等待CPU资源。

注意,如果没有在使用,则为「0%」;如果资源满载,则为「100%」;那么超出的部分,就是在等待资源的进程。

另外,在Linux里不光计算了CPU等待,还包含了其他资源的等待。

# 如果CPU是多核的

如果平均负载为「2」:

在单核CPU上,那肯定是超载的:一个进程为使用CPU资源,而另外一个进程在等待CPU资源;

在双核CPU上,那正好是满载的:两个进程都在使用CPU资源,并且两个进程都在使用不同的CPU资源;

在四核CPU上,那存在着空闲的:两个进程都在使用CPU资源,并且两个进程都在使用不同的CPU资源,并且还有两个CPU的空闲的。

所以,如果要正确解读「平均负载」的含义,需要知道CPU的核心数,这可以使用lscpu / nproc命令。对于平均负载为「6.05」的计算机,在六核主机上是超载的,而在八核主机上则是正常的。

总结

因此,「平均负载」还是很有用的,可以通过它快速了解到系统当前的执行情况。

相关链接

如果想要了解平均负载的更多细节,可以查看下面的文章:

Understanding Linux CPU Load - when should you be worried?
Linux Load Averages: Solving the Mystery

参考文献


ToC

理解「系统负载」与「平均负载」

查看「平均负载」

理解「平均负载」输出

理解「平均负载」具体含义

# 如果CPU是单核的

# 如果CPU是多核的

总结

相关链接

参考文献