Apache JMeter 配置参数详解
Apache JMeter 5.6.3 核心配置参数详解,含配置文件位置、修改方式、参数总览与分类详解(sampler、threads、报告、分布式、JVM),均已实测。
Apache JMeter 配置参数详解
目标:详解 Apache JMeter 5.6.3 的核心配置文件与参数(
jmeter.properties、user.properties、system.properties、启动脚本 JVM 参数),说明各参数的修改方式与实测效果。已在 Ubuntu 22.04.5 / JDK17 环境实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Apache JMeter:5.6.3(安装于
/opt/apache-jmeter) - JDK:OpenJDK 17 (build 17.0.20.1)
- 配置文件目录:
/opt/apache-jmeter/bin/ - 日志文件:
/opt/apache-jmeter/bin/jmeter.log(运行后生成) - 结果示例:
/opt/apache-jmeter/bin/result.jtl
二、前置条件
- JMeter 5.6.3 已安装(见《Ubuntu 22.04 安装 Apache JMeter 5.6.3 指南》)。
- 有
bin/jmeter.properties、bin/user.properties、bin/system.properties三个配置文件的读写权限。
三、参数查看与修改方式
3.1 配置文件层次
JMeter 启动时按优先级加载(后加载覆盖前):
| 文件 | 位置 | 加载方式 | 优先级 |
|---|---|---|---|
jmeter.properties | bin/ | 默认自动加载 | 低 |
user.properties | bin/ | 若存在自动加载 | 中 |
system.properties | bin/ | 若存在自动加载(注入系统属性) | 中 |
命令行 -p 指定文件 | 任意 | 手动指定 | 高 |
命令行 -J / -D 属性 | 命令行 | 手动指定 | 最高 |
3.2 查看当前生效参数(非注释行)
grep -vE "^#|^$" /opt/apache-jmeter/bin/jmeter.properties
回显(节选,5.6.3 默认启用项):
not_in_menu=org.apache.jmeter.protocol.mongodb.sampler.MongoScriptSampler,...
gui.quick_0=ThreadGroupGui
gui.quick_1=HttpTestSampleGui
gui.quick_2=RegexExtractorGui
gui.quick_3=AssertionGui
gui.quick_4=ConstantTimerGui
gui.quick_5=TestActionGui
gui.quick_6=JSR223PostProcessor
gui.quick_7=JSR223PreProcessor
gui.quick_8=DebugSampler
gui.quick_9=ViewResultsFullVisualizer
remote_hosts=127.0.0.1
sampleresult.timestamp.start=true
upgrade_properties=/bin/upgrade.properties
HTTPResponse.parsers=htmlParser wmlParser cssParser
cssParser.className=org.apache.jmeter.protocol.http.parser.CssParser
...
summariser.name=summary
cookies=cookies
classfinder.functions.contain=.functions.
user.properties=user.properties
system.properties=system.properties
jmeter.reportgenerator.apdex_satisfied_threshold=500
jmeter.reportgenerator.apdex_tolerated_threshold=1500
3.3 查看注释中的默认值(关键项)
jmeter.properties 中多数参数以注释形式给出默认值,取消注释即启用:
grep -rE "^#? *(language=|log_level.jmeter=|jmeter.log=|server_port=|server.rmi.ssl=|mode=|summariser.interval=|sampleresult.default.encoding=)" /opt/apache-jmeter/bin/jmeter.properties
回显:
#language=en
#server_port=1099
#mode=Standard
#mode=Batch
#mode=Statistical
#mode=Stripped
#mode=StrippedBatch
#mode=org.example.load.MySampleSender
#mode=Asynch
#mode=StrippedAsynch
#mode=DiskStore
#mode=StrippedDiskStore
#summariser.interval=30
#sampleresult.default.encoding=UTF-8
3.4 修改方式
推荐在 user.properties 中覆盖(不污染默认文件):
cat >> /opt/apache-jmeter/bin/user.properties <<'EOF'
# 自定义覆盖示例
sampleresult.default.encoding=UTF-8
summariser.interval=10
EOF
命令行临时生效(压测命令中直接覆盖):
./jmeter -n -t http_test.jmx -Jsummariser.interval=10 -Jlog_level.jmeter=DEBUG
四、参数总览
| 分类 | 参数 | 默认值 | 说明 |
|---|---|---|---|
| 语言 | language | en | 界面与结果语言(如 zh_CN) |
| 日志 | log_level.jmeter | INFO | JMeter 日志级别(DEBUG/INFO/WARN/ERROR) |
| 日志 | jmeter.log | 默认打印到控制台 + 文件 | 日志输出目标 |
| 结果采样 | sampleresult.timestamp.start | true | 时间戳取请求开始时间 |
| 结果采样 | sampleresult.default.encoding | UTF-8 | 结果默认字符集 |
| 汇总 | summariser.name | summary | 控制台 summary 行名称 |
| 汇总 | summariser.interval | 30 | summary 刷新间隔(秒) |
| 分布式 | remote_hosts | 127.0.0.1 | 远程 agent 地址列表 |
| 分布式 | server_port | 1099 | agent 监听 RMI 端口 |
| 分布式 | mode | Standard | 采样结果传输模式(Standard/Batch/Statistical/...) |
| 报告 | jmeter.reportgenerator.apdex_satisfied_threshold | 500 | Apdex 满意阈值(ms) |
| 报告 | jmeter.reportgenerator.apdex_tolerated_threshold | 1500 | Apdex 可容忍阈值(ms) |
| HTTP | HTTPResponse.parsers | htmlParser wmlParser cssParser | 嵌入式资源解析器 |
| JVM | HEAP(脚本内) | -Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m | 堆内存限制(本机已改) |
五、核心参数分类详解
5.1 语言与显示
language:界面与结果文件的语言。默认 en(英文)。设为简体中文:
language=zh_CN
⚠️ 注意:
language改中文主要影响 GUI 界面;非 GUI 模式下 summary 输出仍为英文固定格式。
5.2 日志参数
log_level.jmeter:JMeter 自身日志级别,默认 INFO。调试时降为 DEBUG:
log_level.jmeter=DEBUG
jmeter.log:日志输出目标。默认写到当前目录 jmeter.log。可用 -j 指定:
./jmeter -n -t http_test.jmx -j /var/log/jmeter/jmeter.log
5.3 结果采样参数
sampleresult.default.encoding:结果 JTL 中响应内容默认编码,默认 UTF-8。
sampleresult.timestamp.start:时间戳含义。true 表示记录请求发送开始时间;false 表示记录采样结束时间。默认 true。
5.4 汇总(summariser)参数
summariser.name:控制台 summary 行的名称前缀,默认 summary(实测日志中即出现 summary = 10 in 00:00:02 ...)。
summariser.interval:summary 输出周期(秒),默认 30;测试总时长不足 30 秒时仅在结束时输出一次。实测压测 2 秒即输出一次汇总。
5.5 分布式(远程)参数
remote_hosts:分布式压测时远程 agent 的地址列表,默认 127.0.0.1。多 agent 用逗号分隔:
remote_hosts=192.168.1.10:1099,192.168.1.11:1099
server_port:agent(jmeter-server)监听 RMI 端口,默认 1099。
mode:采样结果从 agent 回传 master 的传输模式。默认 Standard(每条结果即时回传)。高并发建议 Batch(批量打包回传)以降低网络开销:
mode=Batch
5.6 报告生成参数
jmeter.reportgenerator.apdex_satisfied_threshold:Apdex 满意阈值(毫秒),默认 500。
jmeter.reportgenerator.apdex_tolerated_threshold:Apdex 可容忍阈值(毫秒),默认 1500。
Apdex =(满意样本 + 可容忍样本 × 0.5)/ 总样本,反映用户体验满意度,出现在 HTML 报告总览页。
5.7 JVM 堆内存参数(bin/jmeter 脚本)
JMeter 的 JVM 参数定义在启动脚本 bin/jmeter 中,通过 HEAP 变量注入。默认值为 -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m(1G 堆),本机实测改为 256MB:
grep -n "Xms256m\|Xms1g" /opt/apache-jmeter/bin/jmeter
回显:
166: : "${HEAP:="-Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m"}"
运行时用 HEAP 环境变量覆盖脚本默认(不落盘改文件):
HEAP="-Xms256m -Xmx512m -XX:MaxMetaspaceSize=256m" ./jmeter -n -t http_test.jmx
生效验证(压测运行时):
jps -v
回显(节选,PID 4668 为 JMeter 进程):
4668 ApacheJMeter.jar ... -Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 ...
💡 说明:脚本内还有
GC_ALGO(默认-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20)与JMETER_LANGUAGE(默认-Duser.language=en -Duser.region=EN)两个可覆盖变量,均可用同名环境变量注入。
5.8 system.properties(JVM 系统属性)
bin/system.properties 中的键会作为 JVM 系统属性注入。5.6.3 默认仅一项:
sun.net.http.allowRestrictedHeaders=true
用途:允许 HTTP 客户端发送受限头(如 Host、Connection),某些带校验的压测场景需要。
六、生产配置模板
适用场景:16GB 内存、多核 CPU 的压测服务器,对公网/内网 HTTP 服务做中大规模压测。
bin/user.properties:
# 结果与编码
sampleresult.default.encoding=UTF-8
sampleresult.timestamp.start=true
# 日志
log_level.jmeter=INFO
# 汇总输出
summariser.name=summary
summariser.interval=10
# 报告 Apdex 阈值(按业务 SLA 调整)
jmeter.reportgenerator.apdex_satisfied_threshold=500
jmeter.reportgenerator.apdex_tolerated_threshold=1500
启动脚本 JVM(bin/jmeter 内 HEAP 行):
HEAP="-Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m"
⚠️ 注意:压测机内存充裕时可按趋势放宽堆(如
-Xms256m -Xmx512m);高并发(数千线程)压测建议至少 512MB 堆并开启-XX:+HeapDumpOnOutOfMemoryError便于排障。
七、常见问题
Q1:修改了 jmeter.properties 为什么不生效
多数参数在启动时读取,改后需重启 JMeter;且注意优先级——user.properties 与 -J 会覆盖同名键。排查时用 -J 临时项验证。
Q2:summary 只在测试结束才输出一次
summariser.interval 默认 30 秒,测试时长不足 30 秒时仅结束时汇总一次;调小该值可看到周期输出。
Q3:分布式压测 agent 连不上
检查 agent 的 jmeter-server 是否启动、server_port(默认 1099)是否放行、master 的 remote_hosts 是否写对地址与端口;RMI 场景注意防火墙 1099 与随机高位端口。
Q4:JVM 堆改后 jps -v 看不到
确认修改的是 bin/jmeter 中 HEAP 行且重启了 JMeter;若用 Compose/systemd 托管,还需确认启动方式是否覆盖了 HEAP 环境变量。