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操作系统只计算 running
和 runnable
的进程。但是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
当然, w
和 top
命令也包含cpu load信息。
top命令:
w命令:
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个需要等待)