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

通过apachejmeter.jar运行JMeter报错,jmeter.bat运行正常求原因

JMeter两种启动方式的差异及报错原因分析

我有一个使用Parallel Controller(并行控制器)发送多个GET请求的简单JMeter脚本。通过jmeter.bat启动JMeter运行该脚本时无任何报错,但通过bin目录下的apachejmeter.jar运行时出现以下错误,想了解两种运行方式的具体差异:

java.lang.reflect.InaccessibleObjectException: Unable to make field java.lang.ThreadLocal$ThreadLocalMap java.lang.Thread.inheritableThreadLocals accessible: module java.base does not "opens java.lang" to unnamed module @222114ba
    at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[?:?]
    at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[?:?]
    at java.lang.reflect.Field.checkCanSetAccessible(Field.java:180) ~[?:?]

核心差异说明

  • jmeter.bat启动逻辑:这是官方封装的启动脚本,会自动加载预设的JVM配置参数,其中包含针对Java 9+模块化系统的兼容参数(如--add-opens java.base/java.lang=ALL-UNNAMED)。Parallel Controller依赖反射访问Thread类的内部字段,这些参数恰好解除了模块化带来的访问限制,因此运行无报错。
  • 直接运行apachejmeter.jar的问题:直接用java -jar命令启动时,没有带上这些必要的JVM参数。Java 9及以上的模块系统默认禁止反射访问核心类库的内部字段,Parallel Controller需要访问Thread.inheritableThreadLocals,触发了访问限制,从而抛出异常。

直接运行jar的修复方案

如果必须通过jar包直接启动,需手动添加兼容JVM参数:

java --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED -jar apachejmeter.jar

这些参数允许JMeter所属的未命名模块访问java.lang和java.util包的内部元素,消除反射访问限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:21:33