Linux CPU 100%问题 | 理解 CPU负载和 CPU使用率

CPU 负载和 CPU 使用率

这两个从一定程度上都可以反映一台机器的繁忙程度。

CPU 使用率反映的是当前 CPU 的繁忙程度,忽高忽低的原因在于占用 CPU 处理时间的进程可能处于 IO 等待状态但却还未释放进入wait。

平均负载(load average)是指某段时间内占用 CPU 时间的进程和等待 CPU 时间的进程数,这里等待 CPU 时间的进程是指等待被唤醒的进程,不包括处于wait状态进程。

以上分析可以看出,一台机器很有可能处于低 CPU 使用率高负载的情况,因此看机器的繁忙程度应该结合两者,从实际的使用情况观察,自己的一台双核志强 2.8GHZ,2G 内存的机器在平均负载到 50 左右, CPU 使用率才接近 100%(应用有不少 IO 操作),这种情况下应用还算流畅,实际访问延迟不是很高。因此在 CPU 还空闲的情况下,如何提高 IO 响应是减少负载的关键,很多人认为负载到几十了机器就非常繁忙了,我倒觉得如果这个时候 CPU 使用率比较低,则负载高可能不能很好说明问题,一旦 CPU 处理的进程处理完后,那些等待的进程也能立刻得到响应,这种情况下应该优化 IO 读写速度。真到 CPU 使用率一直 90% 以上,即使平均负载只有个位数(比如某一个进程一直在运算),那机器其实也已经繁忙了~

其实,在前面的文章中,也有写到 CPU 使用率低负载高,原因分析 CPU 使用率低,但是 load 很高,load 很高的可能是IO

CPU 负载的一个类比

判断系统负荷是否过重,必须理解 load average 的真正含义。下面,我根据”Understanding Linux CPU Load”这篇文章,尝试用最通俗的语言,解释这个问题。

首先,假设最简单的情况,你的电脑只有一个 CPU ,所有的运算都必须由这个 CPU 来完成。

那么,我们不妨把这个 CPU 想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过。(很显然,这座桥只能单向通行。)

  • 系统负荷为0,意味着大桥上一辆车也没有。
  • 系统负荷为0.5,意味着大桥一半的路段有车。
  • 系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经”满”了。但是必须注意的是,直到此时大桥还是能顺畅通行的。

系统负荷为1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的70%。以此类推,系统负荷2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负荷3.0,意味着等待上桥的车辆是桥面车辆的2倍。总之,当系统负荷大于1,后面的车辆就必须等待了;系统负荷越大,过桥就必须等得越久。

CPU 的系统负荷,基本上等同于上面的类比。大桥的通行能力,就是 CPU 的最大工作量;桥梁上的车辆,就是一个个等待 CPU 处理的进程(process)。

如果 CPU 每分钟最多处理100个进程,那么系统负荷0.2,意味着 CPU 在这1分钟里只处理20个进程;系统负荷1.0,意味着 CPU 在这1分钟里正好处理100个进程;系统负荷1.7,意味着除了 CPU 正在处理的100个进程以外,还有70个进程正排队等着 CPU 处理。

为了电脑顺畅运行,系统负荷最好不要超过1.0,这样就没有进程需要等待了,所有进程都能第一时间得到处理。很显然,1.0是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了。

CPU 负载-多处理器

上面,我们假设你的电脑只有1个 CPU 。如果你的电脑装了2个 CPU ,会发生什么情况呢?

2个 CPU ,意味着电脑的处理能力翻了一倍,能够同时处理的进程数量也翻了一倍。还是用大桥来类比,两个 CPU 就意味着大桥有两根车道了,通车能力翻倍了。

所以,2个 CPU 表明系统负荷可以达到 2.0,此时每个 CPU 都达到 100% 的工作量。推广开来,n个 CPU 的电脑,可接受的系统负荷最大为 n.0。

CPU 负载-多核处理器

芯片厂商往往在一个 CPU 内部,包含多个 CPU 核心,这被称为多核 CPU 。

在系统负荷方面,多核 CPU 与多 CPU 效果类似,所以考虑系统负荷的时候,必须考虑这台电脑有几个 CPU 、每个 CPU 有几个核心。然后,把系统负荷除以总的核心数,只要每个核心的负荷不超过1.0,就表明电脑正常运行。

怎么知道电脑有多少个 CPU 核心呢?

cat /proc/cpuinfo命令,可以查看 CPU 信息。grep -c 'model name' /proc/cpuinfo命令,直接返回 CPU 的总核心数。

系统负荷的经验法则

1.0是系统负荷的理想值吗?

不一定,系统管理员往往会留一点余地,当这个值达到0.7,就应当引起注意了。经验法则是这样的:

  • 当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。
  • 当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。
  • 当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。

对于我的机器,有24个core,那么,load多少合适呢?

[root@lpf]# grep -c 'model name' /proc/cpuinfo
24

答案是:

[root@lpf]# echo "0.7*24" | bc
16.8
最佳观察时长

最后一个问题,”load average” 一共返回三个平均值—-1分钟系统负荷、5分钟系统负荷,15分钟系统负荷,—-应该参考哪个值?

  • 如果只有1分钟的系统负荷大于1.0,其他两个时间段都小于1.0,这表明只是暂时现象,问题不大。
  • 如果15分钟内,平均系统负荷大于1.0(调整 CPU 核心数之后),表明问题持续存在,不是暂时现象。
  • 所以,你应该主要观察”15分钟系统负荷”,将它作为电脑正常运行的指标。







来源:https://www.cnblogs.com/muahao/p/6492665.html

猜你喜欢

转载自blog.csdn.net/liupeifeng3514/article/details/81044115