CPU load average

1. CPU利用率

是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果CPU被占用时间很高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。

2. Load Average是 CPU的Load

它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。

那么CPU利用率与Load Average对于性能测试的意义有什么区别呢?实际上,CPU利用率反映的是CPU被使用的情况,当CPU长期处于被使用而没有得到足够的时间休息间歇,那么对于CPU硬件来说是一种超负荷的运作,需要调整使用频度。而Load Average却从另一个角度来展现对于CPU使用状态的描述,Load Average越高说明对于CPU资源的竞争越激烈,CPU资源比较短缺。对于资源的申请和维护其实也是需要很大的成本,所以在这种高Average Load的情况下CPU资源的长期“热竞争”也是对于硬件的一种损害。

2.1 用交通拥堵程度 类比 CPU负载

单核CPU就像一条单行道。想象您是一名交警.有时这条单行道太忙了,有汽车在排队等待同行。想让人们知道这条路的交通如何。最直接的指标是就是在特定时间内,这条道路上等待多少辆汽车。如果没有汽车在等待,即将到来的驾驶员便知道他们可以马上驶过。如果有汽车在排队等候,则驾驶员就知道知道要耽误时间了。

所以,交警同志,你应该怎样去定义交通拥塞程度的?可以按照下面的规则:

  • 0.00表示路上根本没有车。实际上,介于0.00和1.00之间都表示没有交通拥堵,到达的汽车可以直接同行。
  • 1.00表示道路完全处于满负荷状态。一切都还不错,但是如果再增加一辆汽车,将会产生交通堵塞。
  • 超过1.00表示有交通堵塞。2.00意味着当前的汽车总量需要两条车道才能保证不堵塞。 3.00意味着当前的汽车总量需要三条车道才能保证不堵塞。
image

这基本上就是CPU负载的含义。 “汽车”是指使用CPU时间(“通行”)或排队使用CPU的进程。 Unix将CPU负载定义为运行队列的长度:当前正在运行的进程数与正在等待(排队)的进程数之和。

就像交警一样,您希望您的汽车/进程永远不会等待。因此,理想情况下,您的CPU负载应保持在1.00以下。如果系统的负载暂时获得高于1.00的峰值,还是可以的,但是负载您始终高于1.00时,则需要进行处理了。

2.2 查看Load Average

负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子:

load average: 1.84, 1.34, 0.68

很多人会这样理解负载均值:三个数分别代表不同时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它们的数字当然是越小越好。数字越高,说明服务器的负载越大,这也可能是服务器出现某种问题的信号。

2.3 程序获取 Load Average

  OperatingSystemMXBean bean = ManagementFactory.getOperatingSystemMXBean();
  bean.getSystemLoadAverage()

3. 线上CPU负载的处理规则

CPU load的理想值是1.0?其实不然,当CPU的 load为1.00的时候,你的系统处于满负荷运转,再来一个进程,就会高于1.00,你的系统的性能将会降低,所以系统没有流出余粮,实际工作中,很多系统管理员认为比较理想的CPU负载应该是0.7,因此我们针对线上CPU负载的处理规则如下:

  • 0.70:需要注意并排查原因 。 如果平均负载保持在> 0.70以上,那么应该在情况变得更糟之前进行调查。

  • 1.00: 不紧急,需要处理。如果平均负载保持在1.00以上,需要查找问题原因并立即解决。否则,你的服务器可能在任何时候出现性能问题。

  • 5.0:紧急状态,立即处理。如果平均负载高于5.00,那么你的系统马上就要崩溃了,很有可能系统挂机或者hang死。因此需要立即处理这种情况,千万不要让你的系统负载达到5!

4. 多处理器时的算法

对于四处理器系统,3.00的负载表示比较健康。

在多处理器系统上,负载是相对于可用处理器核心数量的。在单核系统上,“ 100%利用率”表示负载为1.00,在双核系统上是2.00,在四核系统上是4.00,依此类推。

如果再回到交通问题上,“ 1.00”实际上意味着“一个车道的交通承载量”。在单车道上,这意味着它已被填满。在单向双车道上,负载为1.00表示其交通容量只有50%时-只有一个车道占用,因此还有另一个完整车道可以使用。

与CPU相同:在单核服务器上1.00的负载表示CPU利用率为100%。在双核服务器上,负载为2.00才代表100%CPU使用率

4.1. 系统有多少个核?

cat /proc/cpuinfo 可以获得系统的CPU信息。
若只想得到CPU核数,可以运行: grep 'model name' /proc/cpuinfo | wc -l

知识源:

彻底理解CPU Load-这一篇就够了
https://blog.csdn.net/duzilonglove/article/details/80111753

你可能感兴趣的:(CPU load average)