如何理解和分析linux系统的CPU平均负载情况(load average)_linux如何分析系统负载-程序员宅基地

技术标签: linux  cpu  玩转linux  load average  

最近研究linux时接触到了一个新的概念,叫做CPU的平均负载(load average)。之前都只听说过CPU的使用情况,很少听说过负载情况。于是对这个概念进行了一下研究学习,总结如下,以便日后查阅。

一、如何理解CPU负载情况

CPU负载情况定义为在特定时间间隔内运行队列中的进程数量的平均值,换句话说就是该段时间内正在使用和等待使用CPU的平均任务数。CPU的负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。

请注意:它与CPU使用情况(CPU使用率)不是同一个概念。CPU使用率指的是CPU运行所有程序的耗时占所有时间的比例,它反映的是当前CPU的繁忙程度。举个简单例子,在单处理器中,线程1先工作10ms,线程2再工作30ms,之后CPU空闲60ms。则此100ms时间段内,CPU的利用率就是40%。如果CPU使用率持续居高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。

但是,反过来说,CPU使用率高,并不意味着CPU负载情况就一定大。举例来说:如果我有一个程序需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的负载情况则是趋近于“1”,因为CPU仅负责一个工作嘛!此时的CPU虽然很忙,但是不会卡,你想要再增加一个程序(比如新开一个浏览器窗口)的话,应该问题不大,系统立即就可以响应你的操作。而如果同时执行两个这样的程序呢?CPU的使用率还是100%,但是负载情况则变成2了。再进一步的,如果同时执行10个这样的程序,CPU的使用率依然是100%,可是负载情况变成了10,此时你想要再增加一个程序(比如新开一个浏览器窗口),则系统会变得非常卡,甚至死机!

以上分析可以看出,一台机器很有可能处于低使用率、高负载情况的情况,因此看机器的繁忙程度应该结合两者,从实际的使用情况观察。

可能上面的解释不是很直观,没怎么听懂。下面利用一个网上通用的比喻来形容一下【原文参见Understanding Linux CPU Load】,我添加了一些我自己的理解,让文字看起来更形象一些,不知道有没有形容不当的地方,若有发现还请不吝指正。

首先,假设最简单的情况,你的电脑只有一个CPU,所有的运算都必须由这个CPU来完成。以下所有的分析都是基于这个前提的,请注意!

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

  • 系统负荷为0,意味着大桥上一辆车也没有。一辆新来的车辆想要驶入,分分钟就进来了,完全没有问题(类比成你对电脑的操作,就好比你此时要新开一个音乐播放器,一点击图标,播放器立即就启动了,完全无需等待,响应速度极快,很爽);
  • 系统负荷为0.5,意味着大桥一半的路段有车。新来的车辆想要驶入,依然无需等待,瞬间进入(类比成新开音乐播放器的操作就是,一点击图标,播放器很快就启动了,时延几乎可以忽略);
  • 系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。同样驶来了一辆新的车辆,此时它没法瞬间驶入,而是必须在整个车流队伍的末端进行排队等候,但是好在车流很顺畅,队伍排一会就轮到它了(类比成新开音乐播放器的操作就是,点击图标之后,过了一小会播放器才启动,让你稍稍的等待了一小会,但是还在你可以接受的范围之内);
  • 系统负荷为1.7,意味着车辆太多了,大桥已经被占满了,后面等着上桥的车辆为桥面车辆的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是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了。

当然,上面所有的案例中,我们假设你的电脑都只有1个CPU。如果你的电脑装了2个CPU(或者是装了一个双核的CPU),会发生什么情况呢?

2个CPU(或者双核CPU),意味着电脑的处理能力翻了一倍,能够同时处理的进程数量也翻了一倍。还是用大桥来类比,两个CPU就意味着大桥有两根车道了,通车能力翻倍了。所以,2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU核心的电脑,可接受的系统负荷最大为n.0。

二、如何查看CPU负载情况

首先要看下系统的CPU核心总数,这是前提,单核CPU与多核CPU的负载情况标准是完全不一样的。使用以下命令查看CPU核心数:

leon@Ubuntu:~$ grep -c 'model name' /proc/cpuinfo
6

然后就可以查看CPU的负载情况了。直接使用uptime命令就可以看到了:

leon@Ubuntu:~$ uptime
 20:21:34 up 11:30,  1 user,  load average: 0.00, 0.00, 0.00

load average后面跟的就是CPU的负载值了,这是三个平均值,分别代表的是系统在最近1分钟、5分钟、15分钟内,CPU的平均负载情况(也可以说是平均进程数)。

另外,也可以通过/proc/loadavg文件来查看:

leon@Ubuntu:~$ cat /proc/loadavg 
0.98 0.75 0.57 2/422 2879

前三个数字大家都知道,是1、5、15分钟内的负载情况。后面两个呢,第一个(2/422)的分子2是正在运行的进程数,分母422是进程总数;后一个2879是最近运行的进程ID号。

当然,还可以使用下面更专业的top命令进行更加详细的分析:

leon@Ubuntu:~$ top

top - 20:47:24 up 11:56,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 198 total,   1 running, 144 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 98.2 id,  1.5 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3072672 total,  2074460 free,   553804 used,   444408 buff/cache
KiB Swap:   998396 total,   839408 free,   158988 used.  2317720 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
  906 root      20   0  585180 100336  18024 S   1.3  3.3   3:12.98 Xorg        
 2404 leon      20   0 1369504  85028  41244 S   1.0  2.8   4:24.27 compiz      
 2620 leon      20   0  617872  31252  20524 S   0.7  1.0   0:08.99 gnome-term+ 
 2122 leon      20   0  403148   1192    816 S   0.3  0.0   0:00.83 indicator-+ 
    1 root      20   0  185220   3916   2464 S   0.0  0.1   0:02.59 systemd     
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd    
    4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:+ 
    6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_+ 
    7 root      20   0       0      0      0 S   0.0  0.0   0:00.16 ksoftirqd/0 

三、如何解读CPU负载情况

可以看到,"load average"一共返回三个值,这是3个平均值,分别代表的是系统在最近1分钟、5分钟、15分钟内,CPU的平均负载情况。这三个值落在什么范围内才算合理,超过什么范围会造成系统异常?在实际应用中怎么解读呢?哪个才是最准确的值呢?

首先我们分析一下这几个值的取值范围。拿单核CPU来举例,根据网上的经验值,一般将分水岭设成0.7。经验法则是这样的:

  • 当系统负荷持续小于0.7(指的是调整CPU核心数之后的相对值),表明系统非常健康,任务处理的很及时,效率很高,基本没有时延存在。
  • 当系统负荷持续大于0.7(指的是调整CPU核心数之后的相对值),表明系统有点忙了,你必须开始调查了,问题出在哪里,防止情况恶化。
  • 当系统负荷持续大于1.0(指的是调整CPU核心数之后的相对值),表明系统很忙了,你必须动手寻找解决办法,想办法把这个值降下来。
  • 当系统负荷持续大于3.0(指的是调整CPU核心数之后的相对值),表明系统非常非常忙了,甚至影响到正常的功能了,你得赶紧处理了;
  • 当系统负荷持续达到5.0(指的是调整CPU核心数之后的相对值),就表明你的系统有极其严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。

然后我们来解读一下这三个值的重要级别。在实际的使用中,我们一般认为,如果只有1分钟的系统负荷过大,其他两个时间段都很正常(指的是调整CPU核心数之后的相对值),这表明只是暂时现象,问题不大。如果连15分钟的平均系统负荷也偏大了(指的是调整CPU核心数之后的相对值),表明问题持续存在,则要引起重视了。所以,应该主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LEON1741/article/details/101225374

智能推荐

BAT批处理创建文件桌面快捷方式_批处理创建桌面快捷方式-程序员宅基地

文章浏览阅读1.5w次,点赞9次,收藏26次。简介一个创建某个文件到桌面快捷方式的BAT批处理.代码@echooff::设置程序或文件的完整路径(必选)setProgram=D:\Program Files (x86)\格式工厂.4.2.0\FormatFactory.exe::设置快捷方式名称(必选)setLnkName=格式工厂v4.2.0::设置程序的工作路径,一般为程序主目录,此项若留空,脚本将..._批处理创建桌面快捷方式

射频识别技术漫谈(6-10)_芯片 ttf模式-程序员宅基地

文章浏览阅读2k次。射频识别技术漫谈(6-10),概述RFID的通讯协议;射频ID卡的原理与实现,数据的传输与解码;介绍动物标签属性与数据传输;RFID识别号的变化等_芯片 ttf模式

Python 项目实战 —— 手把手教你使用 Django 框架实现支付宝付款_django 对接支付宝接口流程-程序员宅基地

文章浏览阅读1.1k次。今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用 Python web 框架 Django 来实现支付宝支付,废话不多说,一起来看看如何实现吧。_django 对接支付宝接口流程

Zabbix 5.0 LTS在清理历史数据后最新数据不更新_zabbix问题没有更新-程序员宅基地

文章浏览阅读842次。Zabbix 5.0 LTS,跑了一年多了一直很稳定,前两天空间显示快满了,于是手贱清理了一下history_uint表(使用mysql truncate),结果折腾了一周。大概故障如下:然后zabbix论坛、各种群问了好久都没解决,最后自己一番折腾似乎搞定了。初步怀疑,应该是由于历史数据被清空后,zabbix需要去处理数据,但是数据量太大,跑不过来,所以来不及更新了(?)..._zabbix问题没有更新

python学习历程_基础知识(2day)-程序员宅基地

文章浏览阅读296次。一、数据结构之字典 key-value

mybatis-plus字段策略注解strategy_mybatisplus strategy-程序员宅基地

文章浏览阅读9.7k次,点赞3次,收藏13次。最近项目中遇到一个问题,是关于mybatis-plus的字段注解策略,记录一下。1问题调用了A组件(基础组件),来更新自身组件的数据,发现自己组件有个字段总是被清空。2原因分析调用的A组件的字段,属于基础字段,自己业务组件,对这个基础字段做了扩展,增加了业务字段。但是在自己的组件中的实体注解上,有一个注解使用错误。mybatis-plus封装的updateById方法,如果..._mybatisplus strategy

随便推点

信息检索笔记-索引构建_为某一文档及集构件词项索引时,可使用哪些索引构建方法-程序员宅基地

文章浏览阅读3.8k次。如何构建倒排索引,我们将这个过程叫做“索引构建”。如果我们的文档很多,这样索引就一次性装不下内存,该如何构建。硬件的限制 我们知道ram读写是随机的操作,只要输入相应的地址单元就能瞬间将数据读出来或者写进去。但是磁盘不行,磁盘必须有一个寻道的过程,外加一个旋转时间。那么只有涉及到磁盘,我们就可以考虑怎么节省I/O操作时间。【注】操作系统往往以数据块为单位进行读写。因为读一_为某一文档及集构件词项索引时,可使用哪些索引构建方法

IT巨头英特尔看好中国市场前景-程序员宅基地

文章浏览阅读836次。英特尔技术与制造事业部副总裁卞成刚7日在财富论坛间隙接受中新社记者采访时表示,该公司看好中国市场前景,扎根中国并以此走向世界是目前最重要的战略之一。卞成刚说,目前该公司正面临战略转型,即从传统PC服务领域扩展至所有智能设施领域,特别是移动终端。而中国目前正引领全球手机市场,预计未来手机、平板电脑等方面的发明创新将大量在中国市场涌现,并推向全球。持相同态度的还有英特尔中国区执行董事戈峻。戈峻

ceph中的radosgw相关总结_radosgw -c-程序员宅基地

文章浏览阅读627次。https://blog.csdn.net/zrs19800702/article/details/53101213http://blog.csdn.net/lzw06061139/article/details/51445311https://my.oschina.net/linuxhunter/blog/654080rgw 概述Ceph 通过radosgw提供RES..._radosgw -c

前端数据可视化ECharts使用指南——制作时间序列数据的可视化曲线_echarts 时间序列-程序员宅基地

文章浏览阅读3.7k次,点赞6次,收藏9次。我为什么选择ECharts ? 本周学校课程设计,原本随机佛系选了一个51单片机来做音乐播放器,结果在粗略玩了CN-DBpedia两天后才回过神,课设还没有开始整。于是懒癌发作,碍于身上还有比赛的作品没交,本菜鸡对硬件也没啥天赋,所以就直接把题目切换成软件方面的题目。写python的同学选择了一个时间序列数据的可视化曲线程序设计题目,果真python在数据可视化这一点性能很优秀。..._echarts 时间序列

ApplicationEventPublisherAware事件发布-程序员宅基地

文章浏览阅读1.6k次。事件类:/** * *   * @className: EarlyWarnPublishEvent *   * @description:数据风险预警发布事件 *   * @param: *   * @return: *   * @throws: *   * @author: lizz *   * @date: 2020/05/06 15:31 * */public cl..._applicationeventpublisheraware

自定义View实现仿朋友圈的图片查看器,缩放、双击、移动、回弹、下滑退出及动画等_imageview图片边界回弹-程序员宅基地

文章浏览阅读1.2k次。如需转载请注明出处!点击小图片转到图片查看的页面在Android开发中很常用到,抱着学习和分享的心态,在这里写下自己自定义的一个ImageView,可以实现类似微信朋友圈中查看图片的功能和效果。主要功能需求:1.缩放限制:自由缩放,有最大和最小的缩放限制 2居中显示:.若图片没充满整个ImageView,则缩放过程将图片居中 3.双击缩放:根据当前缩放的状态,双击放大两倍或缩小到原来 4.单指_imageview图片边界回弹