You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JMeter对Apache Ignite数据展示场景开展性能测试?

用JMeter测试Apache Ignite数据展示场景性能的分步指南

一、前置准备

  • 安装JMeter:使用最新稳定版,解压后可按需配置环境变量。
  • 部署Apache Ignite集群:启动至少1个Ignite节点,配置持久化(若需),提前写入与生产规模匹配的测试数据(可通过Ignite SQL、Java API批量插入,模拟真实数据分布)。
  • 准备Ignite依赖包:若用Java API调用Ignite,将ignite-core.jar、ignite-indexing.jar等核心依赖复制到JMeter的lib/ext目录,重启JMeter加载依赖。
  • (可选)安装PerfMon插件:用于监控Ignite节点资源利用率,在JMeter插件管理器中搜索安装PerfMon Metrics Collector,同时在每个Ignite节点启动ServerAgent(直接运行startAgent.sh/startAgent.bat即可)。

二、搭建JMeter测试计划

1. 创建线程组

右键点击"测试计划" → "添加" → "Threads (Users)" → "线程组",配置核心参数:

  • 线程数:模拟的并发用户数(建议从10开始逐步递增到200)
  • Ramp-Up时间:线程全部启动的时长(比如100线程设为60秒,即每秒启动约1.7个线程)
  • 循环次数:选择"永远",再通过"调度器"设置测试持续时间(比如10分钟),避免循环次数限制测试时长。

2. 添加Ignite查询采样器(核心操作)

数据展示场景以查询为主,推荐用JSR223采样器调用Ignite Java API(性能比REST API更稳定):
右键点击线程组 → "添加" → "取样器" → "JSR223 Sampler"

  • 选择语言为groovy(性能优于Java)
  • 编写查询逻辑示例(模拟分页查询用户数据):
// 从SetUp线程组复用Ignite连接(若未用SetUp,可在此直接初始化)
Ignite ignite = vars.getObject("ignite")

// 获取目标缓存
IgniteCache<Long, User> userCache = ignite.cache("USER_CACHE")

// 构造分页查询(模拟数据展示场景的分页需求)
SqlQuery<Long, User> query = new SqlQuery<>(User.class, "age > ?")
query.setArgs(30)
query.setPageSize(20)
query.setPageNumber(vars.get("pageNum") as Integer)

// 执行查询并验证结果
QueryCursor<Cache.Entry<Long, User>> cursor = userCache.query(query)
List<Cache.Entry<Long, User>> results = cursor.getAll()

if (results.isEmpty()) {
    SampleResult.setSuccessful(false)
    SampleResult.setResponseMessage("查询结果为空")
} else {
    SampleResult.setSuccessful(true)
    SampleResult.setResponseData("查询到" + results.size() + "条数据", "UTF-8")
}

cursor.close()

注:client-config.xml为Ignite客户端配置文件,需放在JMeter的bin目录,配置需与集群匹配(如集群地址、客户端模式)。

3. 添加辅助配置元件

  • SetUp线程组:初始化Ignite连接并复用,避免每次请求重建连接。右键点击测试计划 → "添加" → "Threads (Users)" → "SetUp Thread Group",线程数设为1,添加JSR223采样器:
Ignite ignite = Ignition.start("client-config.xml")
vars.putObject("ignite", ignite)
  • TearDown线程组:测试结束后关闭Ignite连接,避免资源泄漏。添加JSR223采样器:
Ignite ignite = vars.getObject("ignite")
if (ignite != null && !ignite.isClosed()) {
    ignite.close()
}
  • 用户定义的变量:添加pageNum等变量,模拟不同页码的查询场景,右键点击线程组 → "添加" → "配置元件" → "用户定义的变量"。

4. 添加监听器收集指标

针对所需的4个核心指标,添加以下监听器:

  • 聚合报告:查看吞吐量(Requests per Second)、平均延迟(Average)、错误率(Error %)等核心数据。
  • PerfMon Metrics Collector:监控Ignite节点的CPU、内存、磁盘IO、网络IO等资源利用率,配置时添加节点IP和ServerAgent端口(默认4444),选择需监控的指标。
  • 响应时间分布图:可视化延迟分布,分析长尾延迟问题。
  • 查看结果树:调试阶段启用,查看错误详情,正式压测时建议关闭以节省资源。

三、执行压测

  1. 用命令行模式运行(避免GUI占用资源导致结果失真):
jmeter -n -t ignite-data-display-test.jmx -l result.jtl -e -o report-output

参数说明:

  • -n:非GUI模式
  • -t:指定测试计划文件
  • -l:保存测试结果到jtl文件
  • -e:测试结束后生成HTML报告
  • -o:HTML报告输出目录
  1. 设计压测场景:
    • 逐步增加并发数:依次测试10、50、100、200并发,每个场景运行10分钟,间隔足够时间让集群恢复。
    • 模拟真实场景:混合单条查询、分页查询、聚合查询等操作,比例与生产数据展示场景一致。

四、分析测试结果

  1. 错误率:查看聚合报告的Error %列,若错误率过高,检查Ignite集群状态、查询语句正确性或客户端连接配置。
  2. 吞吐量:关注Throughput指标(每秒处理请求数),对比不同并发下的变化,找到集群饱和点。
  3. 延迟:分析Average、Median、90% Line、99% Line指标,重点关注长尾延迟是否符合预期。
  4. 资源利用率:通过PerfMon图表查看节点CPU、内存使用率,若CPU持续满载或内存不足,说明集群资源成为瓶颈,需扩容或优化配置。

内容的提问来源于stack exchange,提问作者Equanimity9121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:22:44