性能测试基础---监控
·函数中的参数的分隔符是逗号,因此LR在解析的时候,会将变量的值解析为多个参数,从而导致报错。如果在函数中使用自定义的变量,变量的值是不能包含逗号的。
·性能监控:
·监控是性能测试中非常重要的一个环节,只有通过监控我们才能知道被测系统的性能的好坏,通过分析性能测试和监控的一些数据,我们可以分析定位到性能瓶颈,从而进行性能调优。
·对于监控来说,大家需要掌握的原则如下:
·监控是会对被测系统的性能造成影响的。所以一般来说我们都建议直接在被测服务器上进行监控,而不是通过远程的集成监控方式。
·监控并不是越多越好,而是根据实际情况,逐步加大监控力度。
·监控是分层的,通常我们监控的层面有:
·系统级别的:CPU、内存、网络、磁盘IO等。
·服务器级别的。
·中间件。
·数据库级别。
·监控的工具的选择。
一般来说,建议使用系统、服务器、数据库自带的监控工具来做,其次建议使用专业的第三方检测工具,最后才建议使用性能测试工具or平台提供的集成监控方式。
·系统级别的监控:
常见的操作系统有两种:windows、linux。
两种系统虽然底层的工作机制有所差异,但是对于常见的性能指标来说,差异并不是很大。
·windows平台:对于windows来说,建议使用windows自带的性能监控工具perfmon进行监控。
PS:LR的集成监控,就是通过RPC来调用perfmon的接口来实现的。
·perfmon的使用:
一般我们都是通过新建数据收集器集来进行监控的。
·性能计数器:就是perfmon提供的监控指标(windows提供)。
常见的指标有:
·CPU:cpu是系统的处理器,CPU的指标会直观的反映被测系统的忙碌程度。
常见的有:
·%Processor time(Processor对象):cpu的使用率,该指标直观的反映了被测系统的忙碌程度。通常来说,该指标只要不长时间的超过80%,即没有问题。
PS:CPU使用率高,也有可能并不是当前服务器有问题,而有可能是数据库or其它组件有问题。
在linux下,包括某些windows的版本下,该指标是可能超过100%的,因为有些系统对于不同的CPU处理器是分开统计,最后汇总求和的。
·%User time:是指CPU忙于用户进程所耗费的时间。通常该指标用来结合%Processor time指标,来判断到底是操作系统本身有问题,还是用户进程(服务)有问题。
一般来说,%User time和%Processor time的差值越大,说明系统本身消耗的资源越多,系统本身存在问题的可能性越大。
·Processor queue length(System对象):CPU的请求队列长度。一般来说,该值建议不要长时间超过处理器个数的两倍。
·内存(memory):
对于系统来说,内存一般分为两种:物理内存和虚拟内存。
所谓虚拟内存,其实就是系统从磁盘中所划分的一块区间,本质上还是磁盘。
系统对于内存的使用规则是:优先使用物理内存,虚拟内存只是用来做腾挪使用的。物理内存的速度大概是虚拟内存(磁盘)的60倍以上。
对于虚拟内存的设置来说,不是越大越好,一般建议是物理内存最大值的两倍即可。
从性能的角度来说,物理内存越大越好,系统不使用虚拟内存是最好的。
所有内存的监控都是在Memory对象下完成:
·Available MBytes:系统可用内存数,是指系统当前可用的物理内存数量。一般来说,该值越大越好,最小不能小于物理内存最大值的5%。
·%Commited Bytes in Use:是指正在提交使用的虚拟内存数量占比。该值越小越好。
·Pages/sec:每秒钟的页面交换数,该值越大,意味着系统对于虚拟内存的读写越频繁,产生错误、性能瓶颈的可能性就越大。
PS:对于内存来说,其实实际测试过程中,所有的监控最终的目的都是要判断系统是否存在内存泄漏问题,如果没有,内存不足只需要添加内存即可。
对于内存泄漏来说,我们一般都是通过对应用服务器做dump(镜像)的方式来进行。
dump一般来说需要做三次,然后进行对比:
·性能测试之前
·性能测试中
·性能测试结束
·磁盘IO:磁盘的监控,很多时候是对应应用本身的。
磁盘(物理)本身的性能一般都是通过第三方工具(HD Tune)进行检测。
磁盘的监控指标都是位于Physical Disk对象下,磁盘的指标一般来说都是一式三份:write、read、transfer。transfer就是write和read的和值。
·%Disk time:磁盘使用率,是指磁盘处理器忙于磁盘读写任务所占时间的比例。一般来说,该值越小越好。因为windows下该指标是按磁盘处理器分开统计,最后汇总求和的。因此该值可能超过100%。
·Disk Bytes/sec:每秒钟磁盘处理的字节数量(包括读写),该指标有两个参考点:
·该指标的值和实际业务的吞吐量要能匹配。
·该指标的值不能等于or接近磁盘的物理读写性能的。
·Avg. Disk sec/Transfer:磁盘每次操作的平均消耗时间。该值的单位虽然是秒(second),但是实际上因为4kb读写的机制,通常该指标的值要求在5ms以内,超过30ms,则意味着磁盘本身出现瓶颈。
·Avg.Disk queue length:磁盘队列长度,一般来说,建议磁盘队列长度不要超过磁盘逻辑处理器(分区)数量的两倍。
·linux平台:一般来说,常用的方式有两种:
·linux自带or第三方的一些监控命令来实现。
常用的命令:
top
ps
netstat
iostat
vmstat
dstat
free
·IBM出品的监控工具nmon进行监控。推荐使用。
注意事项:
·官网提供的是一个压缩包的下载,我们需要解压,然后根据linux 内核实际类型去选择对应的nmon版本。
一般来说,在被监控的服务器上,运行命令:uname -sr可以看到linux系统内核的名称和版本。然后选择上传对应版本的nmon到服务器即可。
·一般来说,要给nmon文件赋权。
chmod 755 nmon文件。
nmon命令一般使用以下参数即可:
-f 在当前目录生成默认的监控文件(*.nmon)
-s 指定监控采集的频率,即每隔N秒采集一次性能数据。
-c 指定监控采集的次数。
PS:一般来说,使用nmon监控的时长=s*c。
示例:
./nmon文件名 -f -s5 -c12
表示使用nmon监控,每隔5s采集一次数据,采集12次数据。
PS:不论是windows下的perfmon还是linux下的nmon,甚至包括别的监控工具,都有一个重要的指标--采样频率需要设置。
一般来说,采样频率建议是3-5s为宜。
·服务器的监控:
一般来说,所有的服务器产品都提供了内置的监控组件(模块)。
有些是直接有的,有些是需要安装的,有些是需要配置的。
·像J2EE服务器,应用都是运行在java之上的,此时我们可以根据需要对jvm相关的参数进行监控。
java提供了大量的监控命令来帮助我们实现监控。
建议大家使用jvisualvm。