以非 root 用户身份执行命令时 Jmeter 无法启动

以非 root 用户身份执行命令时 Jmeter 无法启动

我能够以 root 用户身份从 ubuntu 16.10 终端启动 jmeter。但是,如果我尝试使用非 root 用户通过执行与 root 用户尝试的相同命令来启动 jmeter。我收到以下错误。有人能帮我解决现有非 root 用户(不是 sudo 用户)的问题吗?

user@laptop1:~$jmeter
java.lang.UnsupportedClassVersionError: com/thoughtworks/xstream/converters/ConversionException : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2398)
    at java.lang.Class.getConstructor0(Class.java:2708)
    at java.lang.Class.newInstance0(Class.java:328)
    at java.lang.Class.newInstance(Class.java:310)
    at org.apache.jmeter.NewDriver.main(NewDriver.java:262)
JMeter home directory was detected as: /usr/share/jmeter

该错误似乎与不受支持的 JAVA 版本有关(不支持的 major.minor 版本 52.0 )。但您可以看到替代方案中已配置了支持的 JAVA 版本 8

update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

 Selection    Path                                     Priority   Status
 -----------------------------------------------------------
0            /usr/lib/jvm/java-8-oracle/jre/bin/java   1081      auto mode
1            /usr/lib/jvm/java-6-oracle/jre/bin/java   2         manual mode     
2            /usr/lib/jvm/java-7-oracle/jre/bin/java   1         manual mode
* 3          /usr/lib/jvm/java-8-oracle/jre/bin/java   1081      manual mode

guest@duriel:~$ which java
/usr/bin/java
$ ls -la /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 27  2015 /usr/bin/java -> /etc/alternatives/java
$ ls -la /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Feb  9 09:43 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
$ ls -la /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 
-rwxr-xr-x 1 root root 6456 Jan 24 14:22 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
$ update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

答案1

请注意,这不是测试结果,只是研究结果。欢迎对此答案提出建设性批评,也欢迎测试解决方案。

一般来说:

这个错误似乎是由于编译时使用的 Java(JDK)版本与运行时可用的 Java 版本不匹配或同时安装多个版本(如此处的情况)而发生的。

您可以检查并比较编译器的版本

javac -version

和运行时

java -version

要解决实际问题,您应该尝试使用较新版本的 Java JRE 运行 Java 代码,或者向 Java 编译器指定目标参数以指示编译器创建与早期 Java 版本兼容的代码。

有几种方法可以解决这个问题,它似乎归结为您是否要通过确保代码由正确的 JRE 运行或确保代码与当前使用的 JRE 兼容来解决这个问题。

对于前者,一个示例解决方案是将符号链接(/etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java)更改为用于编译的版本。

对于后者,一种解决方案是利用交叉编译选项生成与您尝试使用的早期 Java 运行时版本兼容的新类文件。例如,要生成与 Java 1.4 兼容的类文件,请使用以下命令行:

javac -target 1.4 HelloWorld.java

具体来说:

无论您是自己开发还是使用从以下网站下载的预构建 Jmeter 二进制文件这里重要的是验证完整性。]

请注意,Jmeter 3.1 需要 Java 7 或更高版本,因此应该可以使用 Java 8,但由于你没有运行 MAC OSX,所以没有不尝试使用 Java 7 的原因

另一个可能的解决方案是纠正 JAVA_HOME 环境变量。

export JAVA_HOME=jdk-install-dir

export PATH=$JAVA_HOME/bin:$PATH

资料来源:

https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

http://www.manpagez.com/man/1/javac/

http://jmeter.apache.org/usermanual/get-started.html#classpath

https://jmeter.apache.org/download_jmeter.cgi

https://jmeter.apache.org/changes.html

https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/

相关内容