Apache JMeter是Apache的开源压测工具,支持参数化、断言等功能。其丰富的开源生态提供了各种协议和控制器的扩展,同时可以通过自定义脚本编写参数处理等逻辑。PTS支持JMeter原生引擎的压测,并在此基础上,为您提供便捷的横向扩展能力,同时结合云监控集成功能持续补强JMeter在高并发和监控定位方面的能力和体验。本文介绍PTS原生JMeter压测的优势和操作步骤。

PTS原生JMeter压测的优势

  • 功能强大
    • 简单安装的云端录制器,一键构建压测场景。更多信息,请参见录制Chrome浏览器场景
    • 提供JMeter插件,在本地一键启动云上分布式压测。更多信息,请参见使用PTS-JMeter Plugin专属插件
    • 共享的JMeter运行环境管理,团队成员可共同管理依赖Jar包、jmeter.properties的运行环境,无需每个人在本地单独配置。
    • 流量支持动态秒级调整,百万QPS亦可瞬时脉冲。
    • 强大的报表功能,将压测客户端的实时数据做多维度细分展示和统计,同时自动生成报告供查阅和导出。
    • 支持压测问题诊断,快速定位问题链路,压测过程提供日志明细查询,方便问题排查。更多信息,请参见基于PTS压测轻松玩转问题诊断
    • 支持压测中的监控导出,定制压测监控大盘。更多信息,请参见如何将JMeter压测的指标数据输出到Prometheus
  • 流量真实
    • 流量来源于全国上百城市覆盖各运营商(可拓展至海外),真实模拟最终用户的流量来源,相应的报表、数据更接近用户真实体感。
    • 施压能力较强,最高支持千万RPS的压测流量。
  • 配套完善

    除了压测平台之外,可付费增值提供全链路压测解决方案输出,全方位保障站点平稳应对业务峰值。

限制条件

  • 最大并发用户数不能超过资源包的并发规格,请参见产品价格
  • JMeter压测功能和PTS原生功能共享并发用户数的额度。例如,您持有一个基础版按量抵扣PTS压测资源包(最大并发用户数50000)的资源包,PTS原生压测场景中使用了10000并发,那么同时进行的JMeter集成功能的压测只能使用40000最大并发来启动。

步骤一:导入JMeter脚本

  1. 登录PTS控制台,可用以下两种方式进入创建JMeter场景页面。
    • 概览页面,单击JMeter原生压测
    • 在左侧导航栏选择压测中心 > 创建场景,在创建场景页面,单击JMeter压测
  2. 创建JMeter场景页面,输入场景名
  3. 场景配置页签下,单击上传文件,添加JMeter脚本、JAR文件(即放置在JMeter的安装目录.../lib/ext 下的相关JAR文件)和其他数据文件。
    注意 上传的同名文件将覆盖之前上传的文件。如需对比文件,可在该文件的操作列,获取MD5值,与您本地文件的MD5值进行对比,确认文件是否变更。
    JMeter压测

    使用限制

    • JMX脚本文件:文件大小不超过2 MB。您可上传多个JMX脚本文件,但是压测仅能使用一个JMX脚本,发起压测前必须选中一个JMX脚本文件。
    • JAR文件:文件大小不超过10 MB。上传之前,请在本地JMeter环境调试JAR文件,确保调试通过。
    • CSV和ZIP数据文件:文件大小不超过600 MB。ZIP内打包的文件必须是以CSV结尾的单个文件。非JMX文件总数不超过20个。
      注意
      • 准备CSV文件时,请不要直接修改XLSX文件的后缀。推荐使用EXCEL、Numbers等软件导出,程序生成可以使用Apache commons-csv。
      • 如果JMX脚本中关联了数据文件,请务必将CSV Data Set Config中的Filename改为文件名本身,不要带路径(如下图所示)。否则会读取不到数据文件。同理,如果使用了__CSVRe函数或者在JAR中有指定文件,均需使用文件名。
      JMeter Data File
  4. 如果您上传了多个JMX文件,选中一个JMX文件作为发起该压测场景使用的JMeter脚本。
  5. 可选:为CSV文件选中切分文件,可以保证该文件的数据在每个施压机不重复。不选中该项,每个施压机上使用同一份数据。具体操作,请参见JMeter使用CSV参数文件
  6. 选择是否使用依赖环境。具体操作,请参见使用环境
    • 若选择,则需要选择环境管理中已创建好的环境。
    • 若选择,则需要选择JMeter版本。目前支持Apache JMeter 5.0、4.0、3.3和Java 8。
  7. 可选:如果您上传的脚本中有分布式适配组件,例如定时器(Timer)、控制器(Controller)等,可以对其进行多施压IP地址的分布式适配设置,有利于更精准、有效地进行性能测试。
    1. 设置同步定时器。若您上传的JMeter脚本中自带定时器(Timer),需要选择脚本中的设置值是全局生效单机生效
      • 全局生效:脚本中设置值为集群整体阈值,会根据使用到的IP数来拆分到单机集合阈值上(即单施压机阈值为脚本中值/IP数)。假设共使用到2个施压IP,脚本配置集合阈值为1000,单机阈值即为500。
      • 单机生效:脚本中设置值为单台施压机的阈值,不会替换脚本内容,此时需要注意并发量与配置值是否匹配。假设共使用到2个施压IP,脚本配置集合阈值为1000,单机阈值即为1000,施压集群整体为2000。
      timer
    2. 设置常数吞吐量定时器。若您上传的JMeter脚本中自带控制器(Controller),需要选择脚本中的设置值是全局生效单机生效。具体操作,请参见常数吞吐量分布式使用示例
      • 全局生效:脚本中设置值为集群整体阈值,会根据使用到的施压IP数来拆分到单机吞吐量目标值上(即单施压机阈值为脚本中值/IP数),假设使用到2台施压IP地址,并发为100,脚本上仅1个线程组,其吞吐量目标为每分钟100,计算模式为当前线程,此时场景的总目标每分钟吞吐量为2×(100并发/2 )×(100/2)=5000。
      • 单机生效:脚本中设置值为单台施压机的目标值,不会替换脚本内容,需要注意并发量级与配置值是否匹配。假设使用到2台施压IP,并发为100,脚本上仅1个线程组,其吞吐量目标为每分钟100,计算模式为当前线程,此时场景的总目标每分钟吞吐量为2×(100并发/2)×100=10000
      controller
  8. 可选:设置DNS缓存机制。
    可选择每次访问请求是否清空DNS缓存,若需要清空DNS缓存,可选择使用系统DNS解析器或者自定义DNS解析器。
  9. 可选:单击页面下方的调试场景,可调试创建的JMeter场景。更多信息,请参见JMeter、微服务场景调试界面说明

步骤二:施压配置

创建JMeter场景页面,单击施压配置页签,并完成施压配置。1
参数 描述
压力来源
  • 国内公网(默认模式):发起压测的节点来自全国各地,根据压测的量级来分配对应的节点资源(IP)。
  • 阿里云VPC内网:使用阿里云VPC网络来进行压测,您需要继续选择地域、VPC名称、安全组、虚拟交换机等信息。更多信息,请参见阿里云VPC内网压测
    说明
    • 阿里云内网压测发起节点支持的地域以界面为准。如有其他地域的支持需求,您可以提交工单
    • 在VPC有专线打通了其它云或者线下机房的情况下,若需压测到对应区域,需要确保VPC和这些区域在同一个网段(如都在10.0.0.0/8)。
压力模式 压力模式有两种:并发模式(虚拟用户模式)、RPS模式(Requests Per Second,每秒请求数,吞吐量模式)。
  • 并发模式:“并发”是指虚拟并发用户数,从业务角度,也可以理解为同时在线的用户数。

    适用场景:如果需要从客户端的角度出发,摸底业务系统各节点能同时承载的在线用户数,可以使用该模式设置目标并发。

    • 并发模式下,需要指定全场景的最大并发数,再设置各串联链路的并发权重。
    • 串联链路内各API的响应速度不同(表现为响应时间不同),所以单位时间内API的并发数也会不同。API响应速度越快,单位时间内累积在API上的并发用户数越少。

      例如,共100个虚拟用户需要操作某个事务(即串联链路)。例如:该串联链路中共有2个API,API 1响应速度快而API 2响应速度慢。则更多的虚拟用户将等待在API 2上,API 2需要更多的线程资源来处理更多的虚拟用户请求。

  • RPS模式:RPS(Requests Per Second)是指每秒请求数。

    适用场景:RPS模式即“吞吐量模式”,通过设置起始RPS最大RPS,从服务端的角度出发,直接衡量系统的吞吐能力,免去并发到RPS的繁琐转化,一步到位。

    • API接口(如电商加购物车、下单等)主要用TPS(Transaction Per Second, 每秒事务数)来衡量系统的吞吐能力,选择该模式可以直接按照预期的TPS设置RPS。如果希望检验“下单”接口是否能达到500 TPS的预期,那么设置RPS为500,每秒发送500个请求,可检验系统的吞吐能力。
    • 该模式可控制全局RPS。
流量模型 并发数的递增模型。选择不同的流量模型,页面右侧的压力预估图会同时刷新。
  • 手动调速:并发数是固定的。对应的压力预估图是一条平直线,即设置多少并发数,会一直按这个并发数来进行压测。
  • 均匀递增:默认均匀递增,并发数以每分钟相同数量的递增方式来进行压测。对应的压力预估图是一条斜直线。
  • 阶梯递增:并发数以阶梯递增的方式来进行压测。就是对系统并发的压力呈现阶梯性增加的过程,每个时间段并发数都要增加一个数量值,最终达到一个预期并发数,然后保持该并发数,持续运行一段时间。对应的压力预估图是阶梯形式的曲线图。
最大并发 虚拟用户发起请求的个数。例如:100个并发数就是100个虚拟用户同时发起了请求。
起始百分比 流量模型选择的是手动调速时,需要配置该项。举例说明:当最大并发设置为100,起始百分比设置10%时,会以10个并发数启动压测,压测过程中,最高可以手动调速到100;若不选择手动调速,就会以10个并发数一直压测到结束。
起始RPS RPS模式下,需要设置全局的起始RPS。
最大RPS

RPS模式下,摸底的是服务端吞吐能力,故需要给压测场景设置全局的起始RPS最大RPS

RPS模式的流量模型是按从起始RPS最大RPS均匀递增的模型。

压测时长 设置压测的时间长度。
递增时长 全部并发从0到全部运行起来的时间。当流量模型选择的是均匀递增或者阶梯递增时,需要配置该递增时长。
递增阶梯数 完成递增时间段的阶梯数。当流量模型选择的是阶梯递增时,需要配置该递增阶梯数。
是否指定循环 默认,循环是JMeter特有的,指每个并发是否需要循环执行。并需要设置循环次数,指定每个并发需要循环执行几次。在RPS模式下,可以指定循环。
循环次数 每个循环的并发执行次数。在指定循环后,需要设置循环次数。
指定IP数 指定压测来源的IP个数。
流量地域定制 通过指定施压机的地理位置,即可模拟当地的用户流量。开启后可对施压机地域分布进行配置,从而实现施压流量地域分布的定制化。
在施压配置中,打开流量地域配置开关,您可以按业务需求为地域设置机器数,系统会根据设置的机器数,为不同地域平均分配流量比例。在页面右侧可以看到流量分布的饼图。1
说明
  • PTS流量地域定制功能全部资源包均可使用,支持全球22个地域的流量定制。
  • 在压测概览页或压测报告中,您都可以查看流量地域分布。
IPv6流量 默认是关闭的,开启后,可以对IPv6的地址进行压测。

(可选)步骤三:添加监控

通过添加监控的方式,您可以在压测过程和压测报告中便捷地查看相应的监控数据。具体操作及监控数据的查看步骤,请参见云监控

步骤四:启动压测

  1. 完成基本配置之后,单击保存去压测。在温馨提示对话框中选择执行周期
    • 选择立即执行。待压测准备完成,操作页会进入压测状态。
    • 选择定时压测。以定时任务的方式启动压测,请参见定时压测
  2. 可选:压测过程中,您可以监控压测数据,进行场景调速等操作。

数据信息

数据信息 说明
实时VUM 本次压测消耗的资源总数,单位是VUM(每虚拟用户每分钟),更多信息,请参见常见问题
请求成功率(%) 所有Agent统计周期内全场景请求成功率。
平均RT(成功/失败)
  • 成功RT Avg(ms):所有成功请求的平均RT。
  • 失败RT Avg(ms):所有失败请求的平均RT。
TPS 所有Agent统计周期内的总请求数除以时间(单位:秒(s))所得。
异常数 请求异常的数量。导致请求异常的可能原因较多,常见的例如连接超时、请求超时等。
流量(请求/响应)/s 施压机发送请求的流量和接收响应的流量。
并发(当前/最大) 施压的并发值。若在压测过程中设置了场景调速,会分别显示当前并发值和配置最大并发值。如果在预热阶段则未达到配置并发,预热结束后即为配置的并发值。
总请求数 整个场景在压测过程中发出去的总请求数。
说明 监控数据的来源基于Backend Listener进行了简单的聚合计算。施压Agent的统计采样周期是15s,数据汇总计算的周期也是15s,故可能会有数据延迟的情况。

配置信息

配置信息页罗列了场景配置中的基本信息,包括压力来源、配置时长、流量模型、指定IP数等信息。

压测信息

  • 场景详情页签下,支持场景调速功能。单击场景调速,在场景调速中输入需要并发的数字或百分比,可在压测过程中进行场景并发的调整。单击单个链路的右侧查看图表,查看其TPS、成功率、响应时间、流量等实时数据。
  • 选择压测日志页签,可根据施压机、日志级别、时间范围或施压线程筛选日志,并查看日志详情。
  • 选择施压机性能页签,显示了压测过程中所有施压机的CPU使用率、Load5、内存利用率、网络流量的时序曲线等信息。您还可以筛选查看特定施压机的性能信息。
  • 若您添加了ECS监控、SLB监控、RDS监控和ARMS监控等,可以选择云监控详情页签,查看相关监控信息。具体操作,请参见查看监控详情

采样日志详情

选择采样日志页签,可根据压测Sampler、响应状态、RT范围等筛选日志,查看日志详情。

  1. 根据压测Sampler、响应状态等筛选日志。单击对应的日志操作列的点击查看详情
  2. 日志详情对话框的General 页签下,查看日志字段和字段值。在对话框右上角切换显示格式:通用HTTP协议样式。
  3. 如果JMeter脚本中配置了从HTML文件嵌入资源Embedded Resources from HTML Files),日志详情中会出现子请求详情页签。

    通过选择特定的子请求,可筛选出对应的请求日志。

    Timing瀑布流页签下,显示总请求和每一个子请求的耗时情况。

步骤五:查看压测报告

在压测停止之后,系统会自动收集压测过程中的数据,形成压测报告,展现JMeter压测场景和具体指令的压测动态信息。

  1. 登录PTS控制台,在左侧导航栏选择压测中心 > 报告列表
  2. 报告列表页面,选择JMeter场景类型。在目标报告的操作列,单击查看报告。具体操作,请参见JMeter压测报告
    说明 趋势图中,每个点数据的统计采样周期是15s,最终数据报告上可能初期会有数据延迟的情况。压测报告数据保留30天,如有需要可导出报告本地保存。
    JMeter压测报告

(可选)步骤六:导出压测报告

如您需要,可以将当前压测报告导出至本地。

  1. 报告详情页面,单击报告导出
  2. 选择有水印版本无水印版本,可将压测报告(PDF)下载至本地。

原生JMeter压测的场景示例

PTS的原生JMeter压测适用于以下几种场景。具体使用场景示例,请参见JMeter模拟上传

  • 需要高并发分布式压测
  • 需要压测时观测实时秒级监控,压测后自动生成压测报告
  • 需要统一管理JMeter脚本、JMeter环境依赖

参考文档