专栏首页haifeiWu与他朋友们的专栏【译】了解Linux CPU负载-您何时应该担心?

【译】了解Linux CPU负载-您何时应该担心?

作 者:haifeiWu 原文链接:https://www.hchstudio.cn/article/2020/ce5a/

您可能已经熟悉Linux平均负载。 平均负载是 uptimetop 命令显示的三个数字-它们看起来像这样:

load average: 0.09, 0.05, 0.01

大多数人都对负载平均值的含义有所了解:三个数字代表了较长时间段内的平均值(一分钟,五分钟和十五分钟的平均值),而较低的数字更好。 较高的数字表示问题或机器过载。 但是,门槛是多少? 什么构成“好”和“坏”负载平均值? 什么时候应该关注负载平均值,什么时候应该地修复它?

首先,简要了解负载平均值的含义。 我们将从最简单的情况开始:一台带有一个单核处理器的机器。

The traffic analogy

单核CPU就像一条流量通道。 想象您是一名桥梁操作员…有时您的桥梁太忙了,有汽车排成一行。 您想让人们知道桥上的交通如何。 一个体面的指标是在特定时间等待多少辆汽车。 如果没有汽车在等,传入的驾驶员知道他们可以马上驶过。 如果对汽车进行了备份,则驾驶员知道他们要耽误时间。

那么,网桥运营商,您将使用哪种编号系统? 怎么样:

  • 0.00表示桥上根本没有流量。 实际上,介于0.00和1.00之间表示没有备用轮胎,到达的汽车将继续行驶。
  • 1.00表示桥刚好处于满负荷状态。 一切都还不错,但是如果流量增加一点,事情就会变慢。
  • 超过1.00表示有备份。 多少? 那么,2.00意味着总共有两个车道的汽车价值-桥上一个车道的价值,一个车道的等待价值。 3.00表示总共有3条车道-桥上1条车道值得等待。 等等。

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

就像桥梁操作员一样,您希望您的汽车/过程永远不会等待。 因此,理想情况下,您的CPU负载应保持在1.00以下。 就像桥接运算符一样,如果您暂时获得高于1.00的峰值,您仍然可以…但是当您始终高于1.00时,您就需要担心。

So you’re saying the ideal load is 1.00?

好吧,不完全是。 负载为1.00的问题是您没有净空。 实际上,许多系统管理员会在0.70处画一条线:

  • “需要研究”的经验法则:0.70如果平均负载保持在> 0.70以上,那么应该在情况变得更糟之前进行调查。
  • “立即解决”的经验法则是:1.00。 如果平均负载保持在1.00以上,请查找问题并立即解决。 否则,您将在半夜醒来,这将不会很有趣。
  • “ Arrgh,这是WTF 3AM?” 经验法则:5.0。 如果平均负载高于5.00,则可能会遇到严重的麻烦,盒子要么挂着要么减速,这将(莫名其妙地)发生在最坏的时间,例如深夜或当您在场时 在会议上。 不要让它到达那里。

What about Multi-processors? My load says 3.00, but things are running fine!

有一个四处理器系统? 3.00负载仍然很健康。

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

如果再回到桥梁类比,“ 1.00”实际上意味着“一个车道的通行价值”。 在单车道的桥上,这意味着它已被填满。 在两层桥梁上,负载为1.00表示其容量为50%时-只有一个车道已满,因此还有另一个完整车道可以填充。

与CPU相同:1.00的负载是单核机箱上的CPU利用率为100%。 在双核计算机上,负载为2.00就是100%CPU使用率。

Multicore vs. multiprocessor

当我们讨论主题时,让我们谈谈多核与多处理器。 出于性能目的,具有单个双核处理器的计算机是否基本上等同于具有两个具有一个内核的处理器的计算机? 是。 大致。 关于缓存的数量,处理器之间的进程切换频率等,这里有很多微妙之处。尽管有这些细微之处,但为了确定CPU负载值,内核总数是重要的,无论如何 这些内核分布在许多物理处理器上。

这引出了两个新的经验法则:

-“核数=最大负载”经验法则:在多核系统上,您的负载不应超过可用核数。

-“核心就是核心”经验法则:核心在CPU上的分布方式无关紧要。 两个四核==四个双核==八个单核。 这些都是八个核心。

Bringing It Home

让我们看一下 uptime 的平均负载输出:

~ $ uptime
23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36

这是在双核CPU上,因此我们有很大的余量。在负载达到并保持在1.7左右之前,我什至不会考虑它。

现在,那三个数字呢? 0.65是最后一分钟的平均值,0.42是最近五分钟的平均值,而0.36是最近15分钟的平均值。这使我们想到了一个问题:

我应该观察哪个平均值? 1、5或15分钟?

对于我们已经讨论过的数字(1.00 =立即修复,依此类推),您应该查看5或15分钟的平均值。坦白说,如果您的广告活动平均在一分钟内达到1.0以上的峰值,您还是可以的。这是15分钟平均值超过1.0并保持在该水平上的时间。 (显然,据我们了解,将这些数字调整为系统具有的处理器核心数量)。

因此,核的数量对于解释平均负载很重要……我如何知道我的系统有多少个核?

cat / proc / cpuinfo可获取系统中每个处理器的信息。注意:在OSX上不可用,但Google可以选择。要获得一个计数,请通过grep和单词计数运行它:grep’模型名称’/ proc / cpuinfo | wc -l

参考文档

原文链接

Wikipedia - A good, brief explanation of Load Average

Linux Journal - very well-written article

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • FutureTask源码分析

    FutureTask:一个可取消的异步任务执行类,这个类提供了Future接口的基本实现,主要有以下功能:

    haifeiWu
  • 实时数据并发写入 Redis 优化

    当前架构的逻辑是将并发请求数据写入队列中,然后起一个单独的异步线程对数据进行串行处理。这种方式的好处就是不用考虑并发的问题,当然其弊端也是显而易见的~

    haifeiWu
  • 聊聊ArrayList源码(基于JDK1.8)

    打个广告,楼主自己造的轮子,感兴趣的请点[github]: https://github.com/haifeiWu/lightconf

    haifeiWu
  • 理解Linux中Load

    负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子:load average: 0.09, 0.05, 0.01 很多人会这样理解...

    企鹅号小编
  • 理解Linux中Load_average负载

    负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子:load average: 0.09, 0.05, 0.01 很多人会这样理解...

    用户1263954
  • Python中的类、对象、继承

    上述访问级别更多的是一种编程约定,即便是以双下划线开头的字段,在类的外部也是可以访问的,但不建议这么做。示例代码如下:

    雪飞鸿
  • 分区表场景下的 SQL 优化

    有个表做了分区,每天一个分区。该表上有个查询,经常只查询表中某一天数据,但每次都几乎要扫描整个分区的所有数据,有什么办法进行优化吗?

    叶金荣
  • 面试题41(String str1 = “abc”,“abc”分配在内存哪个区域)

    公告通知 String str1 = “abc”,“abc”分配在内存哪个区域? ---- A 堆 B 栈 C 字符串常量区 D 寄存器 考点:考察求职者对...

    Java学习
  • eclipse.ini:修改-vm参数让eclipse可以直接锁定到任务栏

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • 深度学习网络用于面部表情特征学习

    最近看了一篇关于面部表情特征学习的文章,感觉整体框架和构思特别好,就总结了下,和大家分享。希望得到大家的支持和认可,后期大家互相讨论,互相学习!谢谢!O(∩_∩...

    计算机视觉研究院

扫码关注云+社区

领取腾讯云代金券