如何使用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),选择需监控的指标。
- 响应时间分布图:可视化延迟分布,分析长尾延迟问题。
- 查看结果树:调试阶段启用,查看错误详情,正式压测时建议关闭以节省资源。
三、执行压测
- 用命令行模式运行(避免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报告输出目录
- 设计压测场景:
- 逐步增加并发数:依次测试10、50、100、200并发,每个场景运行10分钟,间隔足够时间让集群恢复。
- 模拟真实场景:混合单条查询、分页查询、聚合查询等操作,比例与生产数据展示场景一致。
四、分析测试结果
- 错误率:查看聚合报告的
Error %列,若错误率过高,检查Ignite集群状态、查询语句正确性或客户端连接配置。 - 吞吐量:关注
Throughput指标(每秒处理请求数),对比不同并发下的变化,找到集群饱和点。 - 延迟:分析
Average、Median、90% Line、99% Line指标,重点关注长尾延迟是否符合预期。 - 资源利用率:通过PerfMon图表查看节点CPU、内存使用率,若CPU持续满载或内存不足,说明集群资源成为瓶颈,需扩容或优化配置。
内容的提问来源于stack exchange,提问作者Equanimity9121
相关产品推荐
相关产品推荐

