技术标签: linux cpu 玩转linux load average
最近研究linux时接触到了一个新的概念,叫做CPU的平均负载(load average)。之前都只听说过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想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过(很显然,这座桥只能单向通行)。
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核心数:
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
可以看到,"load average"一共返回三个值,这是3个平均值,分别代表的是系统在最近1分钟、5分钟、15分钟内,CPU的平均负载情况。这三个值落在什么范围内才算合理,超过什么范围会造成系统异常?在实际应用中怎么解读呢?哪个才是最准确的值呢?
首先我们分析一下这几个值的取值范围。拿单核CPU来举例,根据网上的经验值,一般将分水岭设成0.7。经验法则是这样的:
然后我们来解读一下这三个值的重要级别。在实际的使用中,我们一般认为,如果只有1分钟的系统负荷过大,其他两个时间段都很正常(指的是调整CPU核心数之后的相对值),这表明只是暂时现象,问题不大。如果连15分钟的平均系统负荷也偏大了(指的是调整CPU核心数之后的相对值),表明问题持续存在,则要引起重视了。所以,应该主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。
文章浏览阅读1.5w次,点赞9次,收藏26次。简介一个创建某个文件到桌面快捷方式的BAT批处理.代码@echooff::设置程序或文件的完整路径(必选)setProgram=D:\Program Files (x86)\格式工厂.4.2.0\FormatFactory.exe::设置快捷方式名称(必选)setLnkName=格式工厂v4.2.0::设置程序的工作路径,一般为程序主目录,此项若留空,脚本将..._批处理创建桌面快捷方式
文章浏览阅读2k次。射频识别技术漫谈(6-10),概述RFID的通讯协议;射频ID卡的原理与实现,数据的传输与解码;介绍动物标签属性与数据传输;RFID识别号的变化等_芯片 ttf模式
文章浏览阅读1.1k次。今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用 Python web 框架 Django 来实现支付宝支付,废话不多说,一起来看看如何实现吧。_django 对接支付宝接口流程
文章浏览阅读842次。Zabbix 5.0 LTS,跑了一年多了一直很稳定,前两天空间显示快满了,于是手贱清理了一下history_uint表(使用mysql truncate),结果折腾了一周。大概故障如下:然后zabbix论坛、各种群问了好久都没解决,最后自己一番折腾似乎搞定了。初步怀疑,应该是由于历史数据被清空后,zabbix需要去处理数据,但是数据量太大,跑不过来,所以来不及更新了(?)..._zabbix问题没有更新
文章浏览阅读296次。一、数据结构之字典 key-value
文章浏览阅读9.7k次,点赞3次,收藏13次。最近项目中遇到一个问题,是关于mybatis-plus的字段注解策略,记录一下。1问题调用了A组件(基础组件),来更新自身组件的数据,发现自己组件有个字段总是被清空。2原因分析调用的A组件的字段,属于基础字段,自己业务组件,对这个基础字段做了扩展,增加了业务字段。但是在自己的组件中的实体注解上,有一个注解使用错误。mybatis-plus封装的updateById方法,如果..._mybatisplus strategy
文章浏览阅读3.8k次。如何构建倒排索引,我们将这个过程叫做“索引构建”。如果我们的文档很多,这样索引就一次性装不下内存,该如何构建。硬件的限制 我们知道ram读写是随机的操作,只要输入相应的地址单元就能瞬间将数据读出来或者写进去。但是磁盘不行,磁盘必须有一个寻道的过程,外加一个旋转时间。那么只有涉及到磁盘,我们就可以考虑怎么节省I/O操作时间。【注】操作系统往往以数据块为单位进行读写。因为读一_为某一文档及集构件词项索引时,可使用哪些索引构建方法
文章浏览阅读836次。英特尔技术与制造事业部副总裁卞成刚7日在财富论坛间隙接受中新社记者采访时表示,该公司看好中国市场前景,扎根中国并以此走向世界是目前最重要的战略之一。卞成刚说,目前该公司正面临战略转型,即从传统PC服务领域扩展至所有智能设施领域,特别是移动终端。而中国目前正引领全球手机市场,预计未来手机、平板电脑等方面的发明创新将大量在中国市场涌现,并推向全球。持相同态度的还有英特尔中国区执行董事戈峻。戈峻
文章浏览阅读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
文章浏览阅读3.7k次,点赞6次,收藏9次。我为什么选择ECharts ? 本周学校课程设计,原本随机佛系选了一个51单片机来做音乐播放器,结果在粗略玩了CN-DBpedia两天后才回过神,课设还没有开始整。于是懒癌发作,碍于身上还有比赛的作品没交,本菜鸡对硬件也没啥天赋,所以就直接把题目切换成软件方面的题目。写python的同学选择了一个时间序列数据的可视化曲线程序设计题目,果真python在数据可视化这一点性能很优秀。..._echarts 时间序列
文章浏览阅读1.6k次。事件类:/** * * * @className: EarlyWarnPublishEvent * * @description:数据风险预警发布事件 * * @param: * * @return: * * @throws: * * @author: lizz * * @date: 2020/05/06 15:31 * */public cl..._applicationeventpublisheraware
文章浏览阅读1.2k次。如需转载请注明出处!点击小图片转到图片查看的页面在Android开发中很常用到,抱着学习和分享的心态,在这里写下自己自定义的一个ImageView,可以实现类似微信朋友圈中查看图片的功能和效果。主要功能需求:1.缩放限制:自由缩放,有最大和最小的缩放限制 2居中显示:.若图片没充满整个ImageView,则缩放过程将图片居中 3.双击缩放:根据当前缩放的状态,双击放大两倍或缩小到原来 4.单指_imageview图片边界回弹