如何在JMeter中通过HTTPS发送含编码PDF的大型JSON请求?
解决JMeter发送大型JSON请求的内存优化方案
核心思路
避免将整个请求体加载到JVM内存,改用文件流直接发送的方式,同时优化结果树的存储配置减少性能损耗。
方案1:用Groovy脚本实现流发送(原生支持,无需插件)
在HTTP Request采样器上添加JSR223 PreProcessor,选择Groovy语言,写入以下代码:
import org.apache.http.entity.ContentType import org.apache.http.entity.FileEntity import org.apache.jmeter.protocol.http.sampler.HTTPRequest // 获取当前HTTP采样器 def sampler = ctx.getCurrentSampler() if (sampler instanceof HTTPRequest) { // 替换为你的大型JSON文件路径(绝对路径或相对JMeter启动目录的路径) def requestFile = new File("data/large-request.json") // 创建文件实体,指定JSON内容类型 def fileEntity = new FileEntity(requestFile, ContentType.APPLICATION_JSON) // 清空原有请求参数,设置为文件流实体 sampler.getArguments().clear() sampler.setEntity(fileEntity) }
- 原理:通过
FileEntity让JMeter直接读取文件流发送,不会将整个文件内容加载到内存。 - 注意:确保JSON文件中已经包含编码好的PDF内容,无需再做额外处理。
方案2:关闭结果树的请求体存储(减少内存占用)
即使使用流发送,查看结果树默认会保存请求体副本,导致内存占用高、加载慢。需调整:
- 打开查看结果树,点击右上角的配置按钮。
- 取消勾选"Save request body"选项,仅在调试时临时开启。
辅助优化:调整JVM堆内存(可选)
如果仍有内存压力,修改JMeter启动脚本(jmeter.bat/jmeter.sh)中的JVM参数:
HEAP="-Xms2g -Xmx4g"
根据服务器配置调整数值,避免堆内存不足导致的性能问题。
内容的提问来源于stack exchange,提问作者Raffaele
相关产品推荐
相关产品推荐

