文档章节

理解load average和cpu使用率

laichendong
 laichendong
发布于 2014/06/25 09:27
字数 1275
阅读 1417
收藏 1
《linux中找到最耗CPU的那段Java代码》中提到了cpu使用率和load average。但并没有说明这两者具体的含义和他们之间的关系。他们是衡量linux系统压力的两个重要指标。使用# top 命令可以查看到相关的值。 要理解这两个概念,首先要从cpu的时间片说起。 大家都知道,我们现在所使用的Windows、Linux、Mac OS X都是“多任务操作系统”,就是说他们可以“同时”运行多个程序,比如一边看电影还能一边聊QQ。但是,实际上一个CPU内核在同一时刻只能干一件事,那操作系统是如何实现“多任务”的呢?大概的方法是让多个进程轮流使用CPU一小段时间。由于这个“一小段时间”很短(在linux上为5ms-800ms之间),用户(人)感觉不到,就好像是几个程序同时在运行了。上面提到的“一小段时间”就是我们所说的CPU时间片。 CPU使用率,就是程序对CPU时间片的占用情况。打个比方:一段时间内,看电影的进程占用了30msCPU资源,QQ又占用了10ms,接着空闲了60ms。接着电影又占用了30ms,QQ占用了10ms,空闲了60ms。如果一段时间都是这个水平,那这段时间内,CPU的使用率大概在40%左右。 20130322165207 一般来说,CPU使用率在75%以上就是一个比较高的值。 小提示:top命令中,按数字键1可以查看到每个CPU内核的使用率情况。 load average就相对复杂一些了。他表示的是CPU的负载,但他所包含的信息不是 CPU的使用率状况,而是在一段时间内 CPU正在处理以及等待 CPU处理的进程数之和的统计信息,也就是 CPU使用队列的长度的统计信息。举例来说明: 去游乐园坐过山车。假设一辆过山车能装30个人,那当1-30人来玩过山车时,认为过山车的load<1;当正好30个人时,load=1;当超过30人时,load>1。如果有45个人要玩过山车,那就是说能有30人直接上过山车,另外15人则需要等待。此时过山车的load=45/30 = 1.5。也就是说,1.5的负载表示系统当前满负荷运转,且还有相当于50%满负荷的请求在等待。 可能你会说。不对啊,我经常看见我机器的load在3左右,但我的系统运行很正常,一点不是超负荷3倍运行的感觉。嗯,那我猜你拥有一台至少4核以上的机器吧!在多核系统中 。load average是基于内核的数量决定的,可以简单的理解为每个内核load之和。按每个内核100%负载来算,4个内核,load average的值就是4。那到底多高的负载是一个临界点呢?这没有一个绝对值,一个比较被人所接受的说法是: load average 应该 <= cpu核数 * 0.7。但这种计算方式有个问题。当cpu核数越来越大时, 那30%的空闲也越来越大。另一个也比较被接受的说法是: load average 应该 <= cpu核数 - 1到2。这种计算方式也有个弊端。当cpu核数越来越小时, 那前去的1-2占的比例也越来越大。这明显是值得商榷的。 我们发现,不管是使用# top 还是使用# uptime 命令。查看到的load都是3个值。分别表示最近1分钟,5分钟和15分钟的平均load。那我们到底该看哪个,以哪个值为准呢?其实之所以要给出3个值,就是希望我们能结合起来看。或者说希望展示一个动态的图表式的数据,比如最近一分钟显示负载120%。而最近5分钟和15分钟显示负载为50%。可能你不用太过担心。但是如果你发现系统的负载一直维持在120%以上。恐怕你就该加机器了。 还有一种情况, 高Load,但低CPU使用率。这是很多人想不通的一种诡异情况。还是拿上面过山车的例子来说明。假如一共有60个人来玩过山车。过山车一次运行5分钟。两次运行之间,第一批30人下车,第二批30人上车,系上保险装置等等也要花5分钟。这种情况下过山车的使用率就是50%左右。而过山车的load是2。对应到我们的CPU上,当运行的进程(线程)过多是,频繁的上下文切换耗费了大量的CPU时间,导致真正用在运算的CPU时间片比较少(低CPU使用率),却有很多进程在等待运行(高Load)。

© 著作权归作者所有

共有 人打赏支持
laichendong
粉丝 8
博文 85
码字总数 71483
作品 0
朝阳
程序员
理解load average和cpu使用率

cpu使用率和load average是衡量linux系统压力的两个重要指标。使用# top 命令可以查看到相关的值。 要理解这两个概念,首先要从cpu的时间片说起。 大家都知道,我们现在所使用的Windows、Lin...

潘驴
2017/07/06
0
0
Linux系统的CPU使用率和Load

好吧,我承认这个话题是老生常谈,我自己也在2009年刚接触性能测试时就已经开始关注并略知一二;然而,对于CPU使用率和系统负载Load的确切含义以及它们之间的关系,我相信不是每个人都说得清...

fdhay
2016/04/18
80
0
理解Load Average做好压力测试

理解Load Average做好压力测试 SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果已经无法反映在高并发和高压力下SIP的运行状况,因此需要重新作压力测试。跟在测试人员后面做了...

Professor哥
2017/12/19
0
0
压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Contex

压力测试衡量CPU的三个指标:CPU Utilization、Load Average 和 Context Switch Rate CPU Utilization 好理解,就是CPU的利用率,75%以上就比较高了(也有说法是80%或者更高)。除了这个指标...

Professor哥
2017/12/19
0
0
Linux 性能诊断:负载评估 (v2)

概要:负载诊断流程 观察load average (平均负载) 观察CPU、I/O是否存在瓶颈 从load avgerage等总括性的数据着手,参考CPU使用率和I/O等待时间等具体的数字,从而自顶向下快速排查各进程状态...

RiboseYim
2017/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

C++ gflags

gflags是google一个开源的处理命令行参数的库,相比getopt,更加容易使用。 定义参数 gflags主要支持的参数类型包括 DEFINEbool: boolean DEFINEint32: 32-bit integer DEFINEint64: 64-bit ...

SibylY
24分钟前
0
0
intellij IDEA Properties中文unicode转码问题

在IDEA中创建了properties文件,发现默认中文不会自动进行unicode转码。如下 在project settings - File Encoding,在标红的选项上打上勾,确定即可 效果图如下: unicode转码后效果...

muzi1994
24分钟前
0
0
Java IO类库之PipedWriter

一、PipedWriter介绍 PipedWriter是字符管道输出流,继承自Writer,功能与PipedOutputStream类似,通过与PipedReader组合使用实现类似管道的功能,在多线程环境下,一个线程使用PipedWriter...

老韭菜
29分钟前
0
0
精简分页组件(手写)

需要引入CSS(没错就是这4行) .pagelist { text-align: center; color: #666; width: 100%; clear: both; margin: 20px 0; padding-top: 20px }.pagelist a { color: #666; margin: 0 2px;......

AK灬
29分钟前
3
0
29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?

泡泡是我的好朋友。今年 31 岁,毕业后就进了阿里巴巴,工作五年内从 P4 晋升至 P6、P7、P8。 和他很少聊到工作,但总觉得他有很棒的职场心得,应该分享出来,于是有了这次采访。希望对职场新...

Java填坑之路
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部