如何强制JMeter将jtl文件刷新写入磁盘以保障后续JDBC操作正常执行
JMeter强制jtl文件完全写入磁盘的解决方案
方案1:开启自动刷写配置
修改JMeter的全局配置文件jmeter.properties,找到jmeter.save.saveservice.autoflush参数,将默认值false改为true即可。该配置开启后,每一条采样结果都会实时刷新写入jtl文件,不会滞留在内存缓冲区。
如果不需要修改全局配置,也可以在启动JMeter时通过命令行临时指定参数:jmeter -Jjmeter.save.saveservice.autoflush=true
方案2:添加强制刷写的代码逻辑
在JDBC请求的前一步,添加JSR223采样器,执行以下Groovy代码直接调用结果收集器的刷写方法,强制将所有内存中未写入的结果写入磁盘:
import org.apache.jmeter.reporters.ResultCollector // 遍历所有结果收集器,触发文件刷写 org.apache.jmeter.engine.StandardJMeterEngine.getEngine().getTestListeners().each { item -> if (item instanceof ResultCollector) { item.flushFile() } }
方案3:调整执行顺序从时序上规避问题
将执行JDBC存储操作的采样放到tearDown线程组中运行,tearDown线程组的默认执行逻辑是所有普通业务线程组全部执行完毕、所有测试结果收集完成后才会启动,从执行流程上避免提前读取未完成写入的jtl文件。
补充说明:如果是分布式压测场景,上述自动刷写配置需要在所有压测从节点同步配置,同时要等待所有从节点的测试结果全部回传到主节点完成jtl写入后,再执行存储操作。
内容的提问来源于stack exchange,提问作者Mats Johansson
相关产品推荐
相关产品推荐

