理解linux cpu load - 什么时候应该担心了
译文原文: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
你可能已经很熟悉linux的平均load. 平均load是3个数 (可以用uptime或者top命令查看), 他们看着像下面这样:
load average: 0.09, 0.05, 0.01
- 1
大多数人对这些数都有一个模糊的概念:三个数分别代表了一个随着更长时间上的一个平均值(1分钟, 5分钟, 15分钟). 并且值越小越好. 越大的数可能就表明有问题或者已经高负载了. 但是这个阈值是多少? 什么是状态好的/坏的负载?什么时候我们需要关心这个平均值, 什么时候我们需要赶紧起来修复它?
首先 需要一点背景来了解什么是load/负载, 我们将从最简单的case来看看:一个单核单处理器的机器.
流量
一个单核单处理器的CPU就像一个只有一条车道.假想下你是一个桥梁的工作人员, 有时候,车辆太多了,所以有车辆都排成一条线通过.你想让后面的人知道这条路上的流量到底是多少.一个相当好的指标就是:某一时间有多少车在等待. 如果没有车在等待, 那么来的车就知道,他们可以直接通过. 如果有车在排队了,司机就知道他们要被延迟通过了.
所以,对收费员而言,用什么数字来表示呢?
0.00 表示桥上上没有任何流量. 事实上0.0 到1.00 之间的值都表示这条公路上没有任何阻塞,大家都可以及时通过.
- 1.00 表示这座桥刚好达到它的最大容量. 目前,工作都很正常,但是如果车更多一点,事情就开始变慢了.超过1.00表示已经有排队等待了 怎么看? 2.00 表示该有2条车道, 一条车道在桥上, 另外一条车道在排队等待. 3.00表示该有3条车道, 一条车道在桥上, 另外两条车道在排队等待. 诸如此类的.
这就是CPU load的基本含义. 这里的汽车就是进程 (用cpu的时间片, 也就是通过这座桥 或者排队等待使用cpu). unix使用类似的概念runqueue length来表示:当前有多个正在等待的进程和正在执行的进程的个数总和.
作为桥梁操作员, 你肯定不希望你的汽车/进程有任何的等待. 所以你的cpu load理想情况下应该是低于1. 偶尔一下的超过1也是可以的. 但是如果一直超过1, 我们就需要担心了.
那么理想的cpu load是1.00?
好吧, 并不是. 问题是当load是1.00的时候, 已经没有任何空闲空间了. 实际上, 许多系统管理员有一个经验值:0.70:
- 经验1:需要看下 - 0.70. 如果你的load一直大于0.70, 那么需要抽时间调查下了.
- 经验2:修复它 - 1.00. 如果你的load一直大于1.0,那么赶紧找到问题原因并修复它,否则你就会在半夜睡觉的时候被叫起来,那就不爽了.
- 经验3:啊 凌晨3点,WTF- 5.00. 如果你的load一直大于5.00,你可能真的遇上事了.你的任务可能被挂起了,或者放慢了.并且这会不可预期的在半夜或者你开会的时候发生. 必须解决它.
多核处理器怎么说? load说是3.00 但是没啥问题呀!
对于一个4核处理器的系统, 一个load为3.00的时候 依然很健康.
在一个多处理器系统上, load是相对处理器核数来说的. 100%的使用率在一个单核处理器系统上load是1.00, 在一个双核处理器上就是2.00, 在一个4核处理器上就是4.00.
回到我们前面的桥梁操作员的例子中, 1.00 表示只有一条道有流量. 在一个只有一条道的桥梁上,意味着它被填满了. 在一个两条道的桥梁上, 1.00 表示只有50%的容量 - 只有一条道满了,另外一条道完全可以继续通行(空的).
CPU 也是如此: load 1.00表示: 在单核CPU上100%的占用率, 在一个双核CPU 上, load 2.00代表100%的占用率.
多核心(multi-core)vs多处理器(multi-processor)
关于这个话题, 我们来看下多核心和多处器的区别. 对性能而言, 一个双核处理器和2个单核处理器是差不多的. 当然也有些微妙的关系比如(cache, 进程在多个处理器上的切换). 除开这些,对于load而言, 核心的个数才是最重要, 有多少个物理处理器不重要,也不管他们如何分布.
也就是下面的两个经验:
- **核心个数=最大loa**d: 在一个多核系统中, 你的load不应该超过的你的核心数.
- 核心就是核心: 这些核心在CPU中是如何分布的是不关心的. 2个4核处理器=4个双核处理器=1个八核处理器. 这都是8个核心.
译者注:
多核心 multi-core 一个处理器上可能有多个core 核心. 多个核心可以在一个processor上
多处理器 multi-processor 1个处理器是一个晶元(die) 多个处理器就有多个晶元
参考mac上的配置:
一个晶圆:
拿回家
让我们来看下uptime的输出:
~ $ uptime
23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36
- 1
- 2
这是一个双核的CPU, 所以我们还有很多空间, 根本不需要担心直到它到了1.7或者更高.
那么这三个数字都是啥意思? 0.65是最近1分钟的平均load, 0.42是最近5分钟的平均load, 0.36是最近15分钟的平均负载.
那么这里有2个问题:
1.我该用哪个值? 1分钟, 5分钟还是15分钟?
对于这些数字而言, 你应该关注5分钟或者15分钟的值, 因为CPU 偶尔有spike是比较正常的, 而且一般都会正常工作. 如果最近15分钟这个值都很高, 那就真的要调查下了.
2.既然核心数这么重要, 我怎么知道我的系统有多少个核心?
在linux上可以:
cat /proc/cpuinfo
- 1
译者注:
比如我的一个虚拟机:
理解linux cpu load - 什么时候应该担心了的更多相关文章
- 理解Linux系统负荷load average
理解Linux系统负荷 一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在 ...
- Linux CPU Load Average
理解Linux系统负荷 LINUX下CPU Load Average的一点研究 Linux load average负载量分析与解决思路 Understanding Linux CPU Load - ...
- 理解Linux CPU负载和 CPU使用率
CPU负载和 CPU使用率 这两个从一定程度上都可以反映一台机器的繁忙程度. cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入w ...
- linux cpu load学习笔记
linux系统中的Load对当前CPU工作量的度量 Load Average 就是一段时间 (1 分钟.5分钟.15分钟) 内平均Load. [root@CNC-BJ-5-3N1 ~]# w 20:0 ...
- Understanding Linux CPU Load - when should you be worried?
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
- 理解Linux系统中的load average
理解Linux系统中的load average(图文版) 博客分类: Linux linux load nagios 一.什么是load average? linux系统中的Load对当前CPU工作 ...
- 理解Linux系统中的load average(图文版)转
一.什么是load average? linux系统中的Load对当前CPU工作量的度量 (WikiPedia: the system load is a measure of the amount ...
- 如何理解 Linux 中的 load averages
原文:https://mp.weixin.qq.com/s?src=11×tamp=1533697106&ver=1047&signature=poqrJFfcNAB ...
- 理解Linux系统负荷
一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果公司的Mac电脑上也适用 ...
随机推荐
- NVelocity语法常用指令
对变量的引用:$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ]. 在NVelocity中,对变量的引用都是以$开头加上变量名称.当使用 ...
- 样条之埃特金(Aitken)逐步插值函数
核心代码: ////////////////////////////////////////////////////////////////////// // 埃特金逐步插值 //////////// ...
- C# 图片识别(支持21种语言) (转)
图片识别的技术到几天已经很成熟了,只是相关的资料很少,为了方便在此汇总一下(C#实现),方便需要的朋友查阅,也给自己做个记号. 图片识别的用途:很多人用它去破解网站的验证码,用于达到自动刷票或者是批量 ...
- 原生javascript实现异步的7种方式
1.$(document).ready 点评: 需要引用jquery :兼容所有浏览器. 2.标签的async=”async”属性 async的定义和用法(是HTML5的属性) async 属性规定一 ...
- 大数据开发实战:Hive优化实战1-数据倾斜及join无关的优化
Hive SQL的各种优化方法基本 都和数据倾斜密切相关. Hive的优化分为join相关的优化和join无关的优化,从项目的实际来说,join相关的优化占了Hive优化的大部分内容,而join相关的 ...
- CRF分词的纯Java实现
与基于隐马尔可夫模型的最短路径分词.N-最短路径分词相比,基于随机条件场(CRF)的分词对未登录词有更好的支持.本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用 ...
- DaoCloud加速docker镜像下载
1. 注册DaoCloud用户; 2. 注册完成后,会进入dashboard页面,点击右上方的加速器.该页面提供了Linux.Windows和Mac的加速方案,我这里选择的是Linux: 3. 执行其 ...
- 微信、支付宝App支付-JPay0.0.2发布
JPay 对微信App支付.支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调 GitHub:https://github.com/Javen205/JPay OsChina:h ...
- GPUImage API文档之GPUImageInput协议
GPUImageInput协议主要包含一些输入需要渲染目标的操作. - (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)t ...
- OpenGL ES 3.0 图元组合和光栅化(三)
图元是能够被OpenGL ES 绘制的几何物体,如三角形.线条或者精灵.在图元组合过程 中,对每个图元必须判断是否位于投影 截体内,如果图元不完全在平截体内部,将被视图平截体剪贴,如果完全在平截体外, ...