Linux集群和自动化维1.4.4 Linux下CPU使用率与机器负载的关系与区别-阿里云开发者社区

开发者社区> 华章出版社> 正文

Linux集群和自动化维1.4.4 Linux下CPU使用率与机器负载的关系与区别

简介:

1.4.4 Linux下CPU使用率与机器负载的关系与区别


 笔者的线上竞标业务机器,在业务最繁忙的一段周期内,发现Nginx单机并发活动的连接数超过了2.6万,机器负载(基本上不到4,Nagios监控系统并没有发送报警邮件和短信)和Nginx+Lua服务都是正常的,网卡流量并没有打满,但流量就是怎么也打不进去。经过深入观察,发现这段时期内每台机器的CPU利用率都已经很高了,基本都维持在99%~100%左右,这种情况应该是CPU资源耗尽了,导致不能再继续提供服务,所以这里有必要研究下CPU负载和CPU利用率这两个概念的关系与区别。

CPU负载和CPU利用率虽然是两个不同的概念,但它们的信息可以显示在同一个top命令中。CPU利用率显示的是程序在运行期间实时占用的CPU百分比,而CPU负载显示的则是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。

网上有篇文章提供了一个有趣的比喻,即通过打电话来说明两者的区别,下面笔者按照自己的理解来阐述一下。

某公用电话亭,有一个人在打电话,四个人在等待,每人限定使用电话一分钟,若有人一分钟之内没有打完电话,则只能挂掉电话去排队,等待下一轮。电话在这里就相当于CPU,而正在或等待打电话的人就相当于任务数。

在电话亭的使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们5秒钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。有的人拿起电话就打,一直打完一分钟;而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。如果把电话看作CPU,人数看作任务,就可以说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。

当然,CPU并不会在前三十秒工作,后三十秒歇着,只是说,有的程序涉及大量的计算,所以CPU利用率就高,而有的程序涉及计算的部分很少,CPU利用率自然就低。但无论CPU的利用率是高还是低,都跟后面有多少任务在排队没有必然关系。

CPU负载为多少才算是比较理想的呢?对于这个问题,业界一直存在争议,各有各的说法,个人比较赞同CPU负载小于等于0.5算是一种理想的状态。

不管某个CPU的性能有多好,1秒钟能处理多少个任务,我们都可以认为它无关紧要,虽然事实并非如此。在评估CPU负载时,我们只以5秒钟为单位来统计任务队列长度。如果每隔5秒钟统计的时候,发现任务队列的长度都是1,那么CPU负载就为1。假如只有一个单核的CPU,负载一直为1,那就意味着没有任务在排队,这说明目前机器系统负载还不错。还是以上面提到的竞标业务机器为例,都是四核机器,每个内核的负载为1的话,则总负载为4。也就是说,如果那些竞标服务器的CPU负载长期保持在4左右,还是可以接受的。

CPU使用率达到多少才算比较理想?

建议统计%user+%system的值(后面的章节有相关的Shell脚本),如果长期大于85%的话,就可以认为系统的CPU负载过重,这个时候就可以考虑添加物理CPU或增添业务集群机器了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接