理解load average和cpu使用率(转)

转自:https://my.oschina.net/laichendong/blog/283799?p=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)。

猜你喜欢

转载自java12345678.iteye.com/blog/2382597
今日推荐