linux系统负载相关的概念和度量

系统负载有 CPU利用率 和 LoadAverage这2个概念。
cpu利用率:cpu utilization,是进程(task)被内核调度进程实际分配了CPU资源后,在时间片内使用CPU进行工做运算的时间。它用来描述CPU被使用的状况。
CPU利用率能够用top mpstat sar命令来查看。html

LoadAverage : 反映的是系统中全部进程对CPU资源的“争用”程度。LoadAverage是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。
LoadAverage能够用uptime命令来查看。java

CPU利用率和Load Average的区别linux

压力测试不只须要对业务场景的并发用户等压力参数做模拟,同时也须要在压力测试过程当中随时关注机器的性能状况,来确保压力测试的有效性。当服务器长期处于一种超负荷的状况下运行,所能接收的压力并非咱们所认为的可接受的压力。就比如项目经理在给一我的估工做量的时候,天天都让这我的工做12个小时,那么所制定的项目计划就不是一个合理的计划,那我的早晚会垮掉,而影响总体的项目进度。

CPU利用率在过去经常被咱们这些外行认为是判断机器是否已经到了满负荷的一个标准,看到50%-60%的使用率就认为机器就已经压到了临界了。CPU利用率,顾名思义就是对于CPU的使用情况,这是对一个时间段内CPU使用情况的统计,经过这个指标能够看出在某一个时间段内CPU被占用的状况,若是被占用时间很高,那么就须要考虑CPU是否已经处于超负荷运做,长期超负荷运做对于机器自己来讲是一种损害,所以必须将CPU的利用率控制在必定的比例下,以保证机器的正常运做。

Load Average是CPU的Load,它所包含的信息不是CPU的使用率情况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。为何要统计这个信息,这个信息的对于压力测试的影响到底是怎么样的,那就经过一个类比来解释CPU利用率和Load Average的区别以及对于压力测试的指导意义。

咱们将CPU就类比为电话亭,每个进程都是一个须要打电话的人。如今一共有4个电话亭(就比如咱们的机器有4核),有10我的须要打电话。如今使用电话的规则是管理员会按照顺序给每个人轮流分配1分钟的使用电话时间,若是使用者在1分钟内使用完毕,那么能够马上将电话使用权返还给管理员,若是到了1分钟电话使用者尚未使用完毕,那么须要从新排队,等待再次分配使用。

上图中对于使用电话的用户又做了一次分类,1min的表明这些使用者占用电话时间小于等于1min,2min表示使用者占用电话时间小于等于2min,以此类推。根据电话使用规则,1min的用户只须要获得一次分配便可完成通话,而其余两类用户须要排队两次到三次。

   电话的利用率 = sum (active use cpu time)/period

每个分配到电话的使用者使用电话时间的总和去除以统计的时间段。这里须要注意的是是使用电话的时间总和(sum(active use cpu time)),这与占用时间的总和(sum(occupy cpu time))是有区别的。(例如一个用户获得了一分钟的使用权,在10秒钟内打了电话,而后去查询号码本花了20秒钟,再用剩下的30秒打了另外一个电话,那么占用了电话1分钟,实际只是使用了40秒)

电话的Average Load体现的是在某一统计时间段内,全部使用电话的人加上等待电话分配的人一个平均统计。

电话利用率的统计可以反映的是电话被使用的状况,当电话长期处于被使用而没有的到足够的时间休息间歇,那么对于电话硬件来讲是一种超负荷的运做,须要调整使用频度。而电话Average Load却从另外一个角度来展示对于电话使用状态的描述,Average Load越高说明对于电话资源的竞争越激烈,电话资源比较短缺。对于资源的申请和维护其实也是须要很大的成本,因此在这种高Average Load的状况下电话资源的长期“热竞争”也是对于硬件的一种损害。

低利用率的状况下是否会有高Load Average的状况产生呢?理解占有时间和使用时间就能够知道,当分配时间片之后,是否使用彻底取决于使用者,所以彻底可能出现低利用率高Load Average的状况。由此来看,仅仅从CPU的使用率来判断CPU是否处于一种超负荷的工做状态仍是不够的,必须结合Load Average来全局的看CPU的使用状况和申请状况。

因此回过头来再看测试部对于Load Average的要求,在咱们机器为8个CPU的状况下,控制在10 Load左右,也就是每个CPU正在处理一个请求,同时还有2个在等待处理。看了看网上不少人的介绍通常来讲Load简单的计算就是2* CPU个数减去1-2左右(这个只是网上看来的,未必是一个标准)。

说明:
(1)系统 Load 高不必定是性能有问题,系统 Load 高也或许是由于在进行 CPU 密集型的计算(好比编译)。
(2)系统 Load 高不必定是 CPU 能力问题或数量不够,Load 高只是表明须要运行的队列累积过多了。但队列中的任务实际多是耗 CPU的,也多是耗 I/O 乃至其它因素的。
(3)系统长期 Load 高,不必定要首选增长 CPU,增长 CPU 个别时候会临时看到系统 Load 降低,但治标不治本。
(4)对于CPU利用率和CPU Load Average的结果来判断性能问题。首先低CPU利用率不代表CPU不是瓶颈,竞争CPU的队列长期保持较长也是CPU超负荷的一种表现。对于应用来讲可能会去花时间在I/O,Socket等方面,那么能够考虑是否后这些硬件的速度影响了总体的效率。
(5)这里最好的样板范例就是我在测试中发现的一个现象:SIP当前在处理过程当中,为了提升处理效率,将控制策略以及计数信息都放置在Memcached Cache里面,当我将Memcached Cache配置扩容一倍之后,CPU的利用率以及Load都有所降低,其实也就是在处理任务的过程当中,等待Socket的返回对于CPU的竞争也产生了影响。
(6)将来多CPU编程的重要性。如今服务器的CPU都是多CPU了,咱们的服务器处理能力已经再也不按照摩尔定律来发展。就我上面提到的电话亭场景来看,对于三种不一样时间需求的用户来讲,采用不一样的分配顺序,咱们可看到的Load Average就会有不一样。假设咱们统计Load的时间段为2分钟,若是将电话分配的顺序按照:1min的用户,2min的用户,3min的用户来分配,那么咱们的Load Average将会最低,采用其余顺序将会有不一样的结果。因此将来的多CPU编程能够更好的提升CPU的利用率,让程序跑的更快。编程

参考连接:
http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html
https://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html服务器

相关文章
相关标签/搜索