Linux - 系统指标 CPU load

cpu load

cpu load通常做为一个机器负载的衡量指标

cpu load是对使用或者等待cpu进程的统计(数量的累加)。每一个使用(using)或者等待(waiting)CPU的进程(process),都会使load值+1。
每一个结束的(teminates)进程,都会使load值-1。

所谓使用CPU的进程,是指状态为running的进程,或者说是在cpu run queue里的进程。
所谓等待CPU的进程,是指状态为runnable的进程,或者说是在cpu ready queue里的进程。

大部分Unix操作系统只计算runningrunnable的进程。但是Linux系统除了上述两种状态进行,还计算uninterruptible sleep状态的进程(通常是在等待磁盘IO)。因此,如果有很多进程被block在IO处,Linux系统显示的load会被Unix系统高一些。举个例子,如果有进程由于NFS服务挂掉或者USB设备太慢而block住的话,会显示一个奇怪的现象:cpu使用率不高,但是cpu load很高

cpu load average

通常,我们关注的不是cpu load,而是cpu load average这个指标。

所有的Unix和类Unix操作系统,都有3个"load average"的统计指标。分别表示1分钟、5分钟和15分钟内的cpu负载均值。

使用uptime命令是查看cpu负载最简单的命令:

$ uptime
14:34:03 up 10:43, 4 users, load average: 0.06, 0.11, 0.09

当然,wtop命令也包含cpu load信息。

top命令:


image.png

w命令:


image.png

load average的意义

load average是个无量纲的,大致可认为是cpu进程队列中进程的数量和cpu可处理能力的比值。比如cpu最多同时能处理10个进程,

  • 如果队列中进程数量为5,load average为50%,说明cpu还没达到负载上限
  • 如果队列中进程数量为10,load average为100%,说明刚好达到负载上限
  • 如果队列中进程数量为15,load average为150%,说明超出了cpu的处理能力

单个cpu的load average为0.7以上时,需要注意是否快达到了服务能力的瓶颈。

cpu load和cpu utilization

cpu load(cpu负载)相较于cpu utilization(cpu使用率)更能反映机器的负载情况。

因为,假如有两个配置相同的机器,一个机器cpu utilization是50%,另一个是70%,我们可以认为70%的机器负载比50%的高。但是如果两个机器的cpu use都是100%的话,谁的负载更高,就不得而知了。而cpu load是可以反映出来的。

比如两个机器的per cpu load分别是1.5和1.8,但是他们的cpu use都是100%。但是我们依旧可以知道哪台机器负载更高。

假如在一个单核机器上,load average是"1.73 0.60 7.98",那么可以大致这么解释:

  • 在过去1分钟中,系统负载超额73%。(1.73个runnable进程,但是有0.73个进程需要等待)
  • 在过去5分钟中,系统负载有40%空闲
  • 在过去15分钟中,系统负载超额698%。(7.98个runnable进程,但是有6.98个需要等待)

参考

推荐阅读更多精彩内容