CPU 使用率
CPU Load
定义
程序对CPU时间片的占用情况
系统的Load是对于计算机系统执行计算任务数量的一种度量(注意关键词:amount,数量)。load average代表了一段时间内的系统平均load。
计算方式
采样两个足够短的时间t1、t2:
- 将t1的所有cpu使用情况求和,得到s1
- 将t2的所有cpu使用情况求和,得到s2
- s2 - s1得到这个时间间隔内的所有时间totalCpuTime
- 第一次的空闲idle1 - 第二次的空闲idle2,获取采样时间内的空闲时间
- cpu使用率 = 100 * (totalCpuTime - idle) / totalCpuTime
一个空闲CPU的 load number = 0,每一个正在使用或者等待使用CPU的任务会使 load number + 1,每一个结束的任务会使 load number - 1。
系统会计算一段时间内的 exponentially damped/weighted moving average作为load average。数学公式先抛开,只看结论的话就是,load average代表着正在使用和等待使用CPU的任务数之和。
含义
代表了 cpu 的繁忙程度,是否一直在工作。
cpu这个值反应的是某个采样时间内的cpu使用情况,就是程序对CPU时间片的占用情况。
代表了 单位时间内,需要 cpu 去处理的任务个数。
系统load是处于运行状态或者不可中断状态的进程的平均数
(一个处于运行状态的进程表示正在使用cpu或者等待使用cpu, 一个不可中断状态的进程表示正在等待IO)
查看
top 命令
top 命令
各项值的具体含义
us: 用户空间占用 cpu 的百分比
sy:内核空间占用 cpu 百分比
ni:改变过优先级的进程占 cpu 百分比
id:空闲 cpu 的百分比
wa:磁盘 IO 等待占 cpu 百分比
hi:硬中断占 CPU 百分比
si:软中断占 CPU 百分比
st:虚拟 cpu 占 cpu 的百分比
CPU在过去1分钟,5分钟,15分钟的平均load。
如上图所示:
过去1分钟 load 为 2.76
过去5分钟 load 为 3.12
过去15分钟 load 为 3.51
多核的情况
top 界面按 1 ,可以看到每个 cpu 的情况。默认是 所有 cpu 加起来的一个值,因此可能超过 100%
load average是基于内核的数量决定的,可以简单的理解为每个内核load之和。按每个内核100%负载来算,4个内核,load average的值就是4。
正常情况下,cpu 使用率高,load 也会比较高。cpu 使用率低,load 也会比较低。
也有例外情况:
- load average低,利用率高:如果CPU执行的任务数很少,则load average会低,但是这些任务都是CPU密集型,那么利用率就会高。
- load average高,利用率低:如果CPU执行的任务数很多,则load average会高,但是在任务执行过程中CPU经常空闲(比如等待IO),那么利用率就会低。