我们对被测应用进行性能测试时,除了关注吞吐量、响应时间等应用自身的表现外,对应用运行所涉及的服务器资源的使用情况,也是非常重要的方面,通过实时监控,可以准确的把握不同测试场景下服务器资源消耗情况的变化,对于应用性能分析有着重要的作用,同时也是调整测试场景设计的重要依据。对于使用JMeter执行性能测试的朋友,可能大都知道jmeter-plugins中就有用于服务器资源监控的插件PerfMon Metrics Collector,同时也有不少同学会选择类似nmon的独立监控方案。
之所以决定写这篇文章,一是因为在使用JMeter作为性能测试工具的情况下,使用专为其设计的插件会更方便,二是对于普通互联网公司的性能测试方案,这款插件所提供的功能已经可以满足其资源监控方面的大多数需求,而最重要的一点,是在技术群里发现虽然很多同学知道或者在用这款插件,但是对于一些概念和细节,并不了解,导致不能很好的满足自己的需求,而现在网络上介绍这款插件的博客文章,大都是Quick Start式的入门文章,并不能解答这些同学的疑问。
注:本文使用的JMeter版本为当前最新release版本3.2。
本来PerfMon插件的安装部署不是本文的重点,但为了保持文章的完整性,这里还是进行简单的介绍。有基础的同学可以跳过。
使用PerfMon进行服务器资源监控的方案由两部分来实现
可以在运行脚本时添加–tcp-port xxx来指定端口,如$ ./startAgent.sh --tcp-port 3450,需要注意的是此时JMeterPerfMon插件使用时也需要对绑定端口进行对应修改。更多信息可以参考下载页的官方文档。
安装:JMeter3.0之后,有两种方式安装jmeter-plugins所包含的插件。
第一种方式:到jmeter-plugins官网搜索PerfMon并下载,将得到的jar包放置于JMeter安装目录的lib/ext/路径下,重启JMeter,从Listener中选择使用插件。
第二种方式:使用Plugins Manager,不过由于国内众所周知的原因,很多同学可能遇到网络不通不能展示插件的问题,这里就不展开了,可参考我之前的文章:JMeter性能测试3.0时代之-全新JMeter插件管理
使用:如图2所示,在Listener中选择PerfMon插件,添加到测试计划中,然后参考图3进行配置,包括配置部署了ServerAgent的被测服务器的IP、ServerAgent使用的端口、要获取和展示的资源项等。测试启动后
数据观察和保存:在使用GUI模式进行调试时,测试启动后,可以直接在对应窗口观察到根据采集数据描绘的图形。而要在使用NO GUI模式正式执行测试后,查看监控数据,可以在设计测试计划时在图3的Filename位置配置数据要保存的地址,它和保存JMeter测试主数据的方式一样,需要注意的是不要和JMeter测试主数据保存到同一个文件。在测试执行完成后,再在插件界面载入这个文件,即可显示监控数据的图形展示。
从同事、技术群友们那里,我了解到有不少同学对于PerfMon插件展示的各个指标数据的含义,特别是单位并不是特别明确,所以先讲一下这部分。另外对于数据曲线图的展示,也有一些点值得说明。
关于监控指标数据的疑惑,大多可以从PerfMon插件的Metric parameter设置界面找到答案。我们知道对于服务器如CPU、内存等每一个监控指标类型,都有多种数据从不同维度来体现资源使用情况,比如对于CPU,在Linux系统用top命令,就可以看idle、user、system等数据。
对于PerfMon插件,可以通过Metric parameter来设置某种资源具体要收集和展示的数据,只是它的入口并不是很醒目,如下图4右上的红色箭头所指,需要双击输入框后,点击最后边的按钮打开,打开的界面如图4中级红色箭头所指,虽然每种指标的具体配置项不同,但结构相同,都分为Primary Metrics、Additional Metrics等等,Primary是官方认为常用的,通常也是实际工作中更关心,更具有参考意义的指标项,Additional则是在一些特殊场景可能需要了解的指标项。
这里先简单说一下几种主要的资源类型的指标项,对应的图就不贴了,太占篇幅,影响阅读:
剩下的,就不一一说明了,参考前面几项,我觉得理解其他资源类型的配置应该没有问题了,至于具体指标项的含义,首先用不到的可以暂时不去了解,如果想要了解,请善用搜索。
使用策略:
如果测试场景的测试执行时间较长,采集的监控数据量比较大,为了在GUI模式查看曲线图时更方便、快捷,建议将各个监控指标项单独使用一个PerfMon监听器,从而配置不同的指标项数据存储到不同的文件中,测试执行完毕后,载入数据和数据查看都会更快。
如果预计数据量不会太大,可以以服务器为单位来划分PerfMon监听器。这样可以方便的观察到整个测试过程中,某台服务器各项资源使用情况的变化趋势
对于分布式服务、为了方便观察各个节点的负载分布、负载变化趋势,可以考虑将同类型的节点放置到同一个PerfMon监听器,以便对比观察
数值:
当一个PerfMon监听器中展示多种指标项的数据时,为了曲线图的可观察性,插件会自动进行优化,如图5所示,我们看到在CPU项和内存项都有个x10,代表曲线图中展示的数值是在采集到的真实数值上放大了10倍,目的是为了保证不同数据项在同一坐标系中展示时,各项都变化趋势都能够被观察到。
曲线图配置:
插件界面的Rows标签页可以调整要在曲线图中展示的指标项
Setting标签页中常用的有:
显而易见,TAIL后面的参数就是配置要读取的文件的地址,测试执行时,ServerAgent将根据配置读取所在服务器的指定文件。
本文先简单的讲解了JMeter性能测试资源监控插件的部署,然后从现有指标、曲线图和自定义指标三个方面讲解了插件使用过程中比较使用的细节问题,希望通过本文,让大家能灵活运用这款插件来快速实现自己的测试需求。