问题来源:
www.apache.org官网下载了最新jmeter5.3,在个人开发机上windows8.1下,启动bin/jmeter.bat报错
错误信息如下:
解决思路:
1、可能是自身环境问题
百度一下该错误(谷歌又被墙了,无奈啊),试了几个靠前一点的帖子, 没一个能解决我的问题
2、查看jmeter报错日志:
通过bin/jmeter.log我们可以看到错误日志信息如下:
2020-09-01 19:39:30,901 ERROR o.a.j.JMeter: An error occurred:
java.lang.IllegalArgumentException: Unknown arg: –
at org.apache.jmeter.JMeter.initializeProperties(JMeter.java:850) ~[ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.JMeter.start(JMeter.java:463) [ApacheJMeter_core.jar:5.3]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
at org.apache.jmeter.NewDriver.main(NewDriver.java:252) [ApacheJMeter.jar:5.3]
由此可知系统启动时初始化属性失败
3、从官网将jmeter5.3的源码包down下来并查看那个报错类的源码: JMeter.java
报错行数是850, 我们看看报错地方的代码是怎么写的
List<CLOption> clOptions = parser.getArguments();
for (CLOption option : clOptions) {
String name = option.getArgument(0);
String value = option.getArgument(1);
switch (option.getDescriptor().getId()) {
// Should not have any text arguments
case CLOption.TEXT_ARGUMENT:
throw new IllegalArgumentException("Unknown arg: " + option.getArgument());
还没看代码,前面一行注释: Should not have any text arguments, 不应该有任何文本参数
嗷,好吧,咱们看看启动脚本加了哪些参数吧
4、打开bin/jmeter.bat我们找到启动的地方
找啊找,看到200行的时候发现这么一句
%JM_START% "%JM_LAUNCH%" %ARGS% %JVM_ARGS% -jar "%JMETER_BIN%ApacheJMeter.jar" %JMETER_CMD_LINE_ARGS%
嗯,应该就是你了,看看这条命令,启动参数后面就一个JMETER_CMD_LINE_ARGS,既然这个参数有问题,那我们就打印出来看下吧,在这行代码前面,我们输入:echo %JMETER_CMD_LINE_ARGS% ,然后保存重新点击bin/jmeter.bat执行一下
发现打印出来的这个参数内容就是报错时候的参数内容"-"
既然这样,那我们去掉该参数试试
5、修改启动脚本,去掉参数,修改后内容
%JM_START% "%JM_LAUNCH%" %ARGS% %JVM_ARGS% -jar "%JMETER_BIN%ApacheJMeter.jar"
保存后再次启动bin/jmeter.bat
发现ok了
我又重新找到启动脚本定义该变量的地方:141行,发现如下说明:
:winNT1
rem On NT/2K grab all arguments at once
set JMETER_CMD_LINE_ARGS=%*
意思是NT/2K下,一次性获取所有参数,没看明白啥意思,但感觉我应该是不需要这个参数,百度也没找到合理的解释,暂时先这么地吧