压力测试必知

Load average

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。
如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用’wait’)
- 没有被停止(例如:等待终止)
举例:
➜ ~ uptime
16:19 up 2 days, 5:59, 5 users, load averages: 2.24 2.71 2.85
命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。
一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:2.85/2=1.42。这表示系统比较空闲。


linux下查看load的命令

  • cat /proc/loadavg
  • uptime
    输出结果为:
    16:45:13 up 246 days, 23:11, 1 user, load average: 0.14, 0.14, 0.14
  • w
    功能说明:显示目前登入系统的用户信息。
    语  法:w [-fhlsuV][用户名称]
    补充说明:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
    参  数:
      -f  开启或关闭显示用户从何处登入系统。
      -h  不显示各栏位的标题信息列。
      -l  使用详细格式列表,此为预设值。
      -s  使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
      -u  忽略执行程序的名称,以及该程序耗费CPU时间的信息。
      -V  显示版本信息。
  • top

      功能说明:显示,管理执行中的程序。

      语  法:top [bciqsS][d <间隔秒数>][n <执行次数>]

      补充说明:执行top指令可显示目前正在系统中执行的程序,并通过它所提供的互动式界面,用热键加以管理。

      参  数:

      b  使用批处理模式。

      c  列出程序时,显示每个程序的完整指令,包括指令名称,路径和参数等相关信息。

      d<间隔秒数>  设置top监控程序执行状况的间隔时间,单位以秒计算。

      i  执行top指令时,忽略闲置或是已成为Zombie的程序。

      n<执行次数>  设置监控信息的更新次数。

      q  持续监控程序执行的状况。

      s  使用保密模式,消除互动模式下的潜在危机。

      S  使用累计模式,其效果类似ps指令的”-S”参数。

  • tload

      功能说明:显示系统负载状况。

      语  法:tload [-V][-d <间隔秒数>][-s <刻度大小>][终端机编号]

      补充说明:tload指令使用ASCII字符简单地以文字模式显示系统负载状态。假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形。

      参  数:

      -d<间隔秒数>  设置tload检测系统负载的间隔时间,单位以秒计算。

      -s<刻度大小>  设置图表的垂直刻度大小,单位以列计算。

      -V  显示版本信息。

/proc/loadavg 各项数据的含义

/proc文件系统是一个虚拟的文件系统,不占用磁盘空间,它反映了当前操作系统在内存中的运行情况,查看/proc下的文件可以了解到系统的运行状态。查看系统平均负载使用“cat /proc/loadavg”命令,输出结果如下:

  0.27 0.36 0.37 4/83 4828

  前三个数字大家都知道,是1、5、15分钟内的平均进程数(有人认为是系统负荷的百分比,其实不然,有些时候可以看到200甚至更多)。后面两个呢,一个的分子是正在运行的进程数,分母是进程总数;另一个是最近运行的进程ID号。


CPU利用率与Load Average的区别?

CPU利用率,是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果CPU被占用时间很高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。
Load Average是 CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。


那么CPU利用率与Load Average对于性能测试的意义有什么区别呢?

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


如何评估性能需求中合理的Load Average?

一般来说,Load Average是与机器内核数有关的。以一个单核的机器为例,load=0.5表示CPU还有一半的资源可以处理其他的线程请求,load=1表示CPU所有的资源都在处理请求,没有剩余的资源可以利用了,而load=2则表示CPU已经超负荷运作,另外还有一倍的线程正在等待处理。所以,对于单核机器来说,理想状态下,Load Average要小于1。同理,对于双核处理器来说,Load Average要小于2。结论是:多核处理器中,你的Load Average不应该高于处理器核心的总数量。


不同核处理器之间的load值怎样换算?

性能测试中可能遇到这样的问题,你的线上机器是8核的,但是线下性能测试机只有4核的与16核的,那么我用16核机器测试得到的load值是2.6,换算到8核机器上应该是多少呢?
很不幸,没有一个准确的公式可以用来换算。但是我们可以根据load的含义来做一个推断,假如我们在一个双核的机器上测试100个线程并发访问X页面时load为2,那么同样的并发线程数请求同样的页面,在一台单核的机器上测试,load会是多少呢?在双核机器上,100线程同时请求时load为2,说明2个核都在满负荷运作,且平均每一个核在同时处理50个线程;如果在单核机器上100个线程同时请求,并且假设每一个核还是能同时处理50个线程,那么就会有50个线程在等待,这样看起来CPU的load还是2,但事实上,100个线程同时请求CPU时,已经超出了一个CPU可以同时处理的线程的能力,必然会出现线程之间竞争CPU资源的情况,而线程对CPU的“热竞争”会使CPU耗费更多的资源去做线程调度的事情,所以总体效果来看,单核时load值实际会高于2。
上面是我自己的推论,网上还没有找到相应的资料验证。假如这种推论是对的,那么16核机器上测试得到的load为2.6,在8核机器上测试的话load值肯定高于2.6。究竟高多少应该跟CPU本身的性能也是有关的,具体我还不清楚该如何评估。


cpu 和 load 组合

CPU使用率和Load Average的关系:

     拿去医院体检做一个例子:

     用户:待检查的同学

     CPU:检查的科室(B超、眼科。。。。)

1、 Load 高,CPU使用率低 :

眼科一共有3个医生,检查有次序,必须前一个医生检查结束了才能到下一个医生处理
由于第一个医生的检查耗时比较长,导致后面很多同学排队,但是接下去2个医生都处于空闲状态。
Load:等待的同学,由于等待的同学较多,所以Load的值较高
CPU使用率:只有一个医生处于工作状态,所以CPU的使用率为33.33%

2、 Load低,CPU使用率高:

假设B超科室有和眼科同样多的医生,但是每个医生之间的工作是独立的。
来一个新同学的时间,大约是检查完一个同学的时间。
Load:等待的同学,基本<=1
CPU使用率:每个医生都处于忙碌状态,CPU使用率接近100%
个人觉得这个例子举的比较好理解,CPU就像科室(含多个医生),如果里面只有1个医生看病,另外2个闲着,CPU利用率是33.3%,然后外面很多排队等待使用CPU的人,这些就是排队的进程了,他们都是竞争想要使用CPU,排队等待的人多,就是说明CPU的竞争比较激烈,就是系统平均负载Load Average。所以,cpu被占用了,利用率可能不高的,但是排队等待使用的进程很多,Load却高。所以,测试的时候,不能只看CPU利用率,也要看系统平均负载Load Average。


引用:
http://itlab.idcquan.com/linux/attestation/816287.html
http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html
http://blog.csdn.net/wutongyu344/article/details/38089603

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值