零.引言

我们对被测应用进行性能测试时,除了关注吞吐量、响应时间等应用自身的表现外,对应用运行所涉及的服务器资源的使用情况,也是非常重要的方面,通过 实时监控,可以准确的把握不同测试场景下服务器资源消耗情况的变化,对于应用性能分析有着重要的作用,同时也是调整测试场景设计的重要依据。对于使用 JMeter执行性能测试的朋友,可能大都知道jmeter-plugins中就有用于服务器资源监控的插件PerfMon Metrics Collector,同时也有不少同学会选择类似nmon的独立监控方案。

之所以决定写这篇文章,一是因为在使用JMeter作为性能测试工具的情况下,使用专为其设计的插件会更方便,二是对于普通互联网公司的性能测试方 案,这款插件所提供的功能已经可以满足其资源监控方面的大多数需求,而最重要的一点,是在技术群里发现虽然很多同学知道或者在用这款插件,但是对于一些概 念和细节,并不了解,导致不能很好的满足自己的需求,而现在网络上介绍这款插件的博客文章,大都是Quick Start式的入门文章,并不能解答这些同学的疑问。
注:本文使用的JMeter版本为当前最新release版本3.2。

壹.基础

本来PerfMon插件的安装部署不是本文的重点,但为了保持文章的完整性,这里还是进行简单的介绍。有基础的同学可以跳过。

使用PerfMon进行服务器资源监控的方案由两部分来实现

  1. ServerAgent,部署在被测服务器,负责资源耗用数据的采集,其功能实现主要基于hyperic的SIGAR
  2. PerfMon Listener,以插件形式集成到JMeter,作为其中一个Listener。

1.1 ServerAgent部署

  • 前提:ServerAgent运行需要jre1.4以上版本支持。
  • 下载:从官方下载
  • 部署:将下载的.zip放置到被测服务器,解压后,直接运行startAgent.sh(Linux)/startAgent.bat(Windows)即可,与JMeter进行数据传输时使用简单的文本协议,默认使用TCP协议,默认端口4444。当然,在Linux,我们通常将其放在后台运行,比如用nohup。
  • 验证:为了保证测试过程的顺畅,我们可以先行确认JMeter压力机与被测服务器上部署的ServerAgent的通信是否正常。一个简便的方法是在JMeter压力机使用telnet像ServerAgent发送"test",如telnet 192.168.18.10 4444,连通后,输入test,正常情况下ServerAgent会输出类似INFO 2017-07-29 23:10:52.430 [kg.apc.p] (): Yep, we received the 'test' command的日志。

可以在运行脚本时添加--tcp-port xxx来指定端口,如$ ./startAgent.sh --tcp-port 3450,需要注意的是此时JMeterPerfMon插件使用时也需要对绑定端口进行对应修改。更多信息可以参考下载页的官方文档。

1.2 PerfMon插件使用

  • 安装:JMeter3.0之后,有两种方式安装jmeter-plugins所包含的插件。

    • 第一种方式:到jmeter-plugins官网搜索PerfMon并下载,将得到的jar包放置于JMeter安装目录的lib/ext/路径下,重启JMeter,从Listener中选择使用插件。

      图1 插件下载
    • 第二种方式:使用Plugins Manager,不过由于国内众所周知的原因,很多同学可能遇到网络不通不能展示插件的问题,这里就不展开了,可参考我之前的文章:JMeter性能测试3.0时代之-全新JMeter插件管理
  • 使用:如图2所示,在Listener中选择PerfMon插件,添加到测试计划中,然后参考图3进行配置,包括配置部署了ServerAgent的被测服务器的IP、ServerAgent使用的端口、要获取和展示的资源项等。测试启动后
  • 其实使用方法也很简单,

    JMeterPlugins-Standard-1.4.0.zip

    JMeterPlugins-Extras-1.4.0.zip

    ServerAgent-2.2.1.zip

    拷贝 前两个包中的lib文件的内容到Jmeter/lib下的ext路径下。

    这个时候运行你的Jmeter,就会发现你的监听器中就会多出很多新的内容了。如下图:

    aaarticlea/png;base64,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" alt="" />

  • 3) 运行 ServerAgent-2.2.1\bin\startAgent.bat(Linux使用startAgent.sh) 
    (默认端口为4444,也可以参数指定 –udp-port 4445 –tcp-port 4445) 
    可以看到输出内容如下:

    INFO    2016-02-23 21:21:37.209 [kg.apc.p] (): Binding UDP to 4444
    INFO 2016-02-23 21:21:38.208 [kg.apc.p] (): Binding TCP to 4444
    INFO 2016-02-23 21:21:38.210 [kg.apc.p] (): JP@GC Agent v2.2.0 started
  • 4) 在JMeter 中的测试计划中,按上面的截图,添加监听器 “jp@gc - PerfMon Metrics Collector” 

    点击上面的启动按钮后,查看ServerAgent日志出现:

    INFO    2016-02-23 21:34:46.966 [kg.apc.p] (): Accepting new TCP connection
    INFO 2016-02-23 21:34:46.969 [kg.apc.p] (): Yep, we received the 'test' command
    INFO 2016-02-23 21:34:46.971 [kg.apc.p] (): Starting measures: cpu:
    INFO 2016-02-23 21:34:47.123 [kg.apc.p] (): Client disconnected
  • 运行jmeter时,成功连接然后立刻断开了,并没有获取我们想要的数据。猜想需要一个时间控制的元器件,使其能够获取一段时间的数据。

    解决方法:

    添加线程组,设置循环次数为”永远”; 
    为线程组任意添加一个Sampler(并不设置参数); 
    添加一个PerfMon Metrics Collector监听器;点击运行。(上面如果已经添加过,可直接使用无需再添加) 
    然后在 jp@gc - PerfMon Metrics Collector 界面,启动。

    结果:成功获取chart图,点击stop,即结束监听数据,下面是截图。 

    图2 使用PerfMon插件
    图3 配置
  • 数据观察和保存:在使用GUI模式进行调试时,测试启动后,可以直接在对应窗口观察到根据采集数据描绘的图形。而要在使用NO GUI模式正式执行测试后,查看监控数据,可以在设计测试计划时在图3的Filename位置配置数据要保存的地址,它和保存JMeter测试主数据的方式一样,需要注意的是不要和JMeter测试主数据保存到同一个文件。在测试执行完成后,再在插件界面载入这个文件,即可显示监控数据的图形展示。

贰.进阶

从同事、技术群友们那里,我了解到有不少同学对于PerfMon插件展示的各个指标数据的含义,特别是单位并不是特别明确,所以先讲一下这部分。另外对于数据曲线图的展示,也有一些点值得说明。

2.1 指标

关于监控指标数据的疑惑,大多可以从PerfMon插件的Metric parameter设置界面找到答案。我们知道对于服务器如CPU、内存等每一个监控指标类型,都有多种数据从不同维度来体现资源使用情况,比如对于CPU,在Linux系统用top命令,就可以看idleusersystem等数据。

对于PerfMon插件,可以通过Metric parameter来设置某种资源具体要收集和展示的数据,只是它的入口并不是很醒目,如下图4右上的红色箭头所指,需要双击输入框后,点击最后边的按钮打开,打开的界面如图4中级红色箭头所指,虽然每种指标的具体配置项不同,但结构相同,都分为Primary MetricsAdditional Metrics等等,Primary是官方认为常用的,通常也是实际工作中更关心,更具有参考意义的指标项,Additional则是在一些特殊场景可能需要了解的指标项。

图4 监控指标参数设置

这里先简单说一下几种主要的资源类型的指标项,对应的图就不贴了,太占篇幅,影响阅读:

  1. CPU

    • 对于各指标项,数值都是代表百分比,比如默认配置(combined)下在曲线图中看到某个时间的数值是30,即代表此时总的cpu使用时间占比为30%。
    • 有两点比较有用的地方值得说明:一是在Scope区域,可以通过Per Process选项来获取指定进程的CPU使用情况,二是在CPU Cores区域,我们可以选择监控指定的单个Core。
  2. Memory
    • 各指标项中,usedperc(默认)和freeperc两项的数值代表与总内存的百分比,其余指标项的数值都是指内存大小,选中对应想,可以看到Metric Unit区域单位配置将变为可用,通常Mb会比较适合观察。
    • 同样,也可以选择监控指定进程的数据
  3. Disk I/O:
    • 各指标项中,queue(默认)的数值代表等待I/O队列长度,readswrites分别代表每秒处理的读/写次数,readbyteswritebytes顾名思义,代表每秒读/写的数据量,单位同样在Metric Unit区域配置,通常Mb会比较适合观察。
  • 如果有挂载多个存储设备,可以在Filesystem Filter区域指定要监控的设备。

剩下的,就不一一说明了,参考前面几项,我觉得理解其他资源类型的配置应该没有问题了,至于具体指标项的含义,首先用不到的可以暂时不去了解,如果想要了解,请善用搜索。

2.2 曲线图

  1. 使用策略

    • 如果测试场景的测试执行时间较长,采集的监控数据量比较大,为了在GUI模式查看曲线图时更方便、快捷,建议将各个监控指标项单独使用一个PerfMon监听器,从而配置不同的指标项数据存储到不同的文件中,测试执行完毕后,载入数据和数据查看都会更快。
    • 如果预计数据量不会太大,可以以服务器为单位来划分PerfMon监听器。这样可以方便的观察到整个测试过程中,某台服务器各项资源使用情况的变化趋势
    • 对于分布式服务、为了方便观察各个节点的负载分布、负载变化趋势,可以考虑将同类型的节点放置到同一个PerfMon监听器,以便对比观察
  2. 数值

    • 当一个PerfMon监听器中展示多种指标项的数据时,为了曲线图的可观察性,插件会自动进行优化,如图5所示,我们看到在CPU项和内存项都有个x10,代表曲线图中展示的数值是在采集到的真实数值上放大了10倍,目的是为了保证不同数据项在同一坐标系中展示时,各项都变化趋势都能够被观察到。

      图5 曲线图
  3. 曲线图配置

    • 插件界面的Rows标签页可以调整要在曲线图中展示的指标项
    • Setting标签页中常用的有:
      • use relative times用于配置曲线图x轴表示相对时间(测试开始时为0)还是实际系统时间。
      • Auto-zoom rows for best fit默认勾选,则会有上一节讲数值时提到的展示数据自动放大的功能,取消勾选则全部展示采集的实际数值。
      • Limit number of points in row to xx points:勾选后可以设定曲线图展示的采样点
        数量,我们的测试报告会有不同的角色查看,其中一些角色可能不具备也不需要对监控数据的细节理解能力,此时我们提供的监控曲线图应该是易读的,如果按照实
        际的所有采样点来渲染出曲线图,可能会有很多偏离趋势的噪点数据,这对于不了解的人来说可能会有很多疑惑,所以当我们有了分析结论,最后报告呈现的时候,
        可以考虑通过调整采样点,来让曲线图更好的展示资源使用趋势,消除其他不必要的信息。

        图6 曲线图配置
      • Force maximum Y axis value to xx,实际上我更多会选择不勾选,不勾选的情况下,插件在描绘
        曲线图的时候,会根据数值大小自动调整Y轴最大值,以达到更佳可读性,如图7和图8,分别是不勾选,和勾选后设置最大值为100时的曲线图效果,显然图7
        可以更容易的观察到变化的细节。不过与上一项类似,可能在对外出具报告时,为了更少的解释说明,可能需要某个指定的数值。

        图7 不自定义Y轴
        图8 自定义Y轴

2.3 自定义指标

  1. EXEC

    • 在插件界面选择指标类型时,可以看到一个EXEC选型,该选项允许我们在后面的Metric parameter中配置一个命令语句(该语句最终应该输出单个数值),测试执行时,ServerAgent将执行该命令,同时插件将接收ServerAgent捕获的输出数值。
    • 语法规则:EXEC所配置的语句需要按照一定的规则来填写,先是给出命令的执行程序的位置,然后将具体的命令以及命令的参数作为,命令和命令参数都需要用冒号":"来隔开。比如/bin/sh:-c:free |grep Mem |awk '{pring $7}'
      • /bin/sh,代表命令的执行程序
      • -c,即/bin/sh-c选型,有-c选型的情况下,将从后面的字符串按一定规则解析为命令和命令参数
      • 可以看到有用冒号分隔了执行程序/选型参数/命令语句
      • 对于windows,也类似,如C\:\Windows\System32\cmd.exe:/c:echo %RANDOM%
  2. TAIL
    • 如同Linux的tail命令,读取文件的最后一行,用在这里,需要文件每一行只包含一个单独的数值。借助tail,我们可以通过自定义脚本监控任意指标,只需要脚本的输出满足要求即可。
    • 显而易见,TAIL后面的参数就是配置要读取的文件的地址,测试执行时,ServerAgent将根据配置读取所在服务器的指定文件。

叁.总结

本文先简单的讲解了JMeter性能测试资源监控插件的部署,然后从现有指标、曲线图和自定义指标三个方面讲解了插件使用过程中比较使用的细节问题,希望通过本文,让大家能灵活运用这款插件来快速实现自己的测试需求

服务器资源监控插件(jmeter)的更多相关文章

  1. JMeter性能测试-服务器资源监控插件详解

          零.引言 我们对被测应用进行性能测试时,除了关注吞吐量.响应时间等应用自身的表现外,对应用运行所涉及的服务器资源的使用情况,也是非常重要的方面,通过实时监控,可以准确的把握不同测试场景下服 ...

  2. (转)JMeter性能测试-服务器资源监控插件详解

    零.引言 我们对被测应用进行性能测试时,除了关注吞吐量.响应时间等应用自身的表现外,对应用运行所涉及的服务器资源的使用情况,也是非常重要的方面,通过实时监控,可以准确的把握不同测试场景下服务器资源消耗 ...

  3. JMeter ServerAgent服务器资源监控插件

    本文介绍对Linux服务器的服务进行压测时,使用jmeter serverAgent插件监控服务器资源. 1.插件准备 所需插件: JMeterPlugins-Extras.jar JMeterPlu ...

  4. jmeter(五十一)_性能测试中的服务器资源监控与分析

    概述 性能测试过程中,对服务器资源的监控是必不可少的.这里的资源又分了两块,windows和linux   linux下监控资源 访问网址http://jmeter-plugins.org/downl ...

  5. 软件测试_Loadrunner_性能测试_服务器资源监控

    使用Loadrunner进行Windows服务器性能监控 将装有Loadrunner的机器叫做监控端,被监控资源的服务器叫做被监控端 一.前置环境设置 1. 设置被监控端管理员账户可用:我的电脑右键- ...

  6. JMeter资源监控插件PerfMon的使用

    1.插件下载 首先下载jmeter的插件管理工具,下载地址:jmeter-plugins.org 如英文说明,把下载后的jar包放到jmeter的安装目录lib/ext文件夹下,重启jmeter,就会 ...

  7. shell:实现linux服务器资源监控并发送告警邮件

    1.安装方式 wget http://10.8.225.126/wsmonitor/install.sh;sh install.sh test@test.com 2.install.sh #!/bin ...

  8. 性能测试学习之路 (三)jmeter常见性能指标(相关术语、聚合报告 && 服务器性能监控配置 && 图形结果 && 概要报告)

    1 性能测试目的 性能测试的目的:验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,以优化软件. 最后起到优化系统的目的性能测试包括如下几个方面: 1.评估系统的能力:测试 ...

  9. k8s资源指标API及metrics-server资源监控

    简述: 在k8s早期版本中,对资源的监控使用的是heapster的资源监控工具. 但是从 Kubernetes 1.8 开始,Kubernetes 通过 Metrics API 获取资源使用指标,例如 ...

随机推荐

  1. mongoDB 文档操作_删

    mongoDB 文档删除 MySQL对比 mysql delete from table where ... mongo db.collection.deleteOne(query) 删除函数 del ...

  2. BZOJ4552 HEOI2016/TJOI2016排序(线段树合并+线段树分裂)

    很久以前写过二分答案离线的做法,比较好理解.事实上这还是一个线段树合并+分裂的板子题,相比离线做法以更优的复杂度做了更多的事情.具体不说了.怎么交了一遍luogu上就跑第一了啊 #include< ...

  3. 重建docker实例

    1.显示当前运行的docker实例: [root@docker-test /]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORT ...

  4. Token防止表单重复提交和CSRF攻击

    Token,可以翻译成标记!最大的特点就是随机性,不可预测,一般黑客或软件无法猜测出来. Token一般用在两个地方: 1: 防止表单重复提交 2: anti csrf攻击(Cross-site re ...

  5. 解决 IIS 反向代理ARR URLREWRITE 设置后,不能跨域跳转 return Redirect 问题

    1.选择iis根节点,点击ARR 2.选择代理设置 3.去掉reverse rewrite host in response headers的勾选,点击应用即可

  6. Resources (being shared)

    论文下载求助论坛 数学杂志的模版 答辩PPT模版 发一篇文章的经历 数学期刊名称缩写 英文书籍下载 英文书籍下载 中文书籍下载 数学分析高等代数考研试题官方下载地址

  7. 使用sessionStorage、localStorage存储数组与对象

    先介绍一下localStorage localStorage对象是HTML5的客户端存储持久化数据的方案.为了能访问到同一个localStorage对象,页面必须来自同一个域名(子域名无效),使用同一 ...

  8. EffectiveC++ 第5章 实现

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 5 实现 Implementations 适当提出属于 ...

  9. 尝试去读SQLMAP源码(一)

    本人python 小菜比 一枚.拜读业界典范~~ 阅读sqlmap 的版本是1.1.6,目前应该是最新版. sqlmap.py 脚本中 72~83 def modulePath(): "&q ...

  10. phpstudy 安装Apache SSL证书实现https连接

    Windows phpstudy安装ssl证书教程. 工具/原料   phpstudy 集成环境 申请的SSL证书 方法/步骤     首先申请免费的ssl证书,很多地方都可以申请.我是在腾讯云!如图 ...