译自Understanding Linux CPU Load - when should you be worried?缓存
你可能已经很早就熟悉Linux负载均值这个概念了,经过uptime
或者top
命令就能够获得三个数字,具体以下所示:安全
load average: 0.09, 0.05, 0.01app
绝大多数人对负载均值只是有个粗浅的认识:即这三个数字分别表明系统最后1分钟、最后10分钟以及最后15分钟的平均负载值,而且这些数字越小越好,若是比较大则表示系统设备有可能负荷超载等问题。性能
可是你有没有想过,这些数字有没有边界?表明“好”或者“坏”的边界值又是多少?你何时应该关注这些数值?你应该何时去尽快处理使其降下来?ui
在讨论这些问题以前,先了解一些负载均值相关的背景知识。咱们用一台配置了单核处理器的设备,举个简单例子解释说明下。3d
单核CPU就像一条车道的交通状况。假设你是一座大桥的操做员,有时桥上太忙了,有不少车等着过桥。你想让人们知道桥上的交通情况。那么一个合适的度量标准,就是在特定时间有多少辆车在等待。若是没有车在等,新来的司机知道他们能够立刻开过去。若是桥上堵车,那么司机就知道他们会遇到延误。code
所以,这些数值用于以下用途:cdn
0.00表示桥上一辆车都没有。也就是说,若是数值介于0.00~1.00之间,则表示没有堵车,全部的车辆均可以流畅经过。blog
0.50表示桥上的车辆只有一半。能够看到车辆间距较大,不会拥挤。队列
1.00表示桥上的车辆达到最大值。一切刚恰好,但若是桥上再来一辆车,那么就出现堵车的状况了。
大于1.00表示堵车了。负载数值和堵车严重程度有什么关系呢?举例说明,2.00表示等待过桥的车辆和桥上满负载的车辆同样多,3.00表示等待的车辆是桥上满负载的车辆的2倍,以此类推。
这基本上就是CPU负载的解释。“汽车”就是使用CPU时间片(即“过桥”)或排队使用CPU(等待“过桥”)的进程,Unix将其称为运行队列长度,即当前运行的进程数加上等待(排队)运行的进程数之和。
就像做为一个大桥的管理者,你确定不肯意车辆/进程一直处于等待状态,因此应该让你的CPU负载低于1.00。若是偶尔超过1.00不用担忧,但若是一直大于1.00,那么就须要考虑哪里出了问题了。
其实并非这样的。当负载达到1.00时表示已经触及天花板了,因此通常来讲会有一条边界线,即0.70。
经验法则之“须要关注”——0.70:若是你的CPU负载均值一直处于>0.70的状态,那么在事情变得更糟以前,须要调查一下缘由所在。
经验法则之“马上修复”——1.00:若是你的CPU负载均值一直处于>1.00的状态,那么赶忙查缘由修复它吧!
经验法则之“紧急情况”——5.00:若是你的CPU负载均值超过了5.00,你恐怕是遇到大麻烦了!你的系统设备可能卡顿或者特别慢,随时会出现意外状况。
是4个处理器的系统吗?若是是,那就没事儿。
在多处理器系统上,负载与可用处理器内核的数量有关。“100%利用率”在单核系统上负载为1.00,在双核系统上为2.00,在四核系统上为4.00等等。
回到刚才大桥的例子上,1.00表示一条车道上的车辆。在单行道上的大桥上,1.00表示恰好满载;在两条车道的大桥上,1.00表示只有50%的负载——即一条车道满载,而另外一条车道是空的。
一样地在CPU上:负载为1.00表示在单核系统上是100%利用率,负载为2.00表示在双核系统上是100%利用率。
如今,咱们讨论下多核以及多处理器的话题。从性能的角度来看,一台只有一个双核处理器的机器基本上等同于一台只有两个单核处理器的机器。这里有许多关于缓存数量、处理器之间的进程切换频率等的细微之处。尽管有这些细微之处,可是为了评估CPU负载值,不管这些内核分布在多少物理处理器上,内核的总数量都很重要。
这就引出了两条新的经验法则:
内核总数=最大负载:在一个多核系统里,负载不该该超过可用的内核数之和。
内核就是内核:内核如何分布在CPU上并不重要,2个四核== 4个双核== 8个单核,这些都是8个内核。
输入uptime
命令,获得以下的负载均值:
~ $ uptime 23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36
这是一个双核处理器,因此还有很大的余量空间,不须要为它担忧,除非负载长期处于1.7或更大。
那么这三个数字怎么处理呢?0.65是最后1分钟的平均值,0.42是最后5分钟的平均值,0.36是最后15分钟的平均值。这就引出了一个问题:
这三个数值,我应该关注哪一个?1分钟,5分钟,仍是15分钟?
关于这些数值的含义咱们已经讨论过(1.00表示须要立刻修复等等),你最应该关注的是5分钟或15分钟的平均值。坦率地说,若是你的机器在一分钟内的平均峰值超过1.0,仍然是能够正常工做的。当15分钟的平均值超过1.0时,你须要迅速去调整直至正常范围内(固然具体数值要看你的系统内核数量)。
内核的数量对于解释平均负载很是重要,那么我如何得知系统有多少内核?
经过cat /proc/cpuinfo
命令获取每一个处理器的详细信息,grep 'model name' /proc/cpuinfo | wc -l
命令则获取全部的内核数量。