一般说到CPU使用率,大家都不陌生,就是程序对CPU时间片的占用情况,但我们大多情况下,还需要看另外一个指标,CPU load average.
先来看着图:
下面top命令,可以看到load average,3个值,分别记录了1min,5min,15min的系统平均负载。(用uptime命令也可以查看到这三个值)
这几个值是linux的负载均值,对性能有重要的意义。但这个值设置多少是合理的呢?
放出定义:load average 表示的是CPU的负载,包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。
我们举个例子:高速公路收费站10个车道,那当有1-9辆车在不同的通道通过时,认为收费站的load<1;当正好10辆车在不同的通道时,load=1;当超过10辆车(假设每个通道是均匀有车)时,load>1.假设有100辆车,每个通道10辆,那就说明能有10辆车能过去,另外90辆车则需要等待。此时收费站的load为100/10=10. 这个10的负载表示系统当前满负荷运转,且还有相当于90%的满负载的请求在等待。
但是经常我们也看到load average 有高达6,那真的是有问题嘛?不一定,因为它是基于操作系统的内核的数量决定的,一般可以简单粗暴的理解为内核load之和。 比如现在一般都是8个内核,那么load average的值就是8、
一般业界能够被接受的值是, load average <= CPU核数 *0.7。 但现在硬件越来越便宜,核数庞大的机器也越来越大,如遇到机器的CPU核数很大,那么剩余的30%部分也越大,这个时候可以适当的调整下,只要不要到整个核数都用满。
综合,理想的系统load是既没有进程(线程)等待也没有CPU空闲,可最大限度的利用CPU资源。
回到上面的图,我们可以看到1min,5min,15min 的平均load值。这三个字是要结合起来看的,如果机器持续在一段时间内都是load很高的,那么也许机器性能下降了,可能需要进一步排查问题,也许是要增加机器了。
有时候也会遇到一种情况,Load很高,但系统的CPU使用率却比较低。可能的原因是频繁的上下文切换导致耗费了大量的CPU时间,以至于用在运算的CPU时间片比较少,却有很多进程在等待运行。