【问题标题】:Jmeter remote test: .RemoteJMeterEngineImpl_Stub (no security manager: RMI class loader disabled) [duplicate]Jmeter远程测试:.RemoteJMeterEngineImpl_Stub(无安全管理器:RMI类加载器已禁用)[重复]
【发布时间】:2016-04-25 15:21:18
【问题描述】:

我是 Jmeter 的新手,我尝试使用此工具和下一个配置运行分布式测试:

  1. 客户端(主) - Windows 7
    • Java 版本 - 1.8.0_92(也尝试了 7u79)
    • JMeter,版本 - 2.13
  2. 服务器(从)-VM Ubuntu 14(使用 VirtualBox)
    • Jave 版本 - 1.7.0_95
    • Jmeter 版本 - 2.8.20130705

我已经完成并尝试了我在官方教程和其他帖子(包括 stackoverflow 帖子)中找到的所有内容,但结果都成功了。 当我尝试通过客户端在服务器上运行测试时,我一直收到下一个错误:

java.rmi.UnmarshalException:解组返回错误;嵌套异常是: java.lang.ClassNotFoundException: org.apache.jmeter.engine.RemoteJMeterEngineImpl_Stub(无安全管理器:RMI 类加载器已禁用)

我尝试过的不同组合:

  • 在 Ubuntu 和 Windows 上禁用防火墙
  • 使用同一个子网
  • 在 jmeter-server 文件中设置主机名:

    RMI_HOST_DEF=-Djava.rmi.server.hostname=172.29.148.49

  • 创建 .java.policy 文件并授予 jmeter/bin 目录中的所有权限:

    授予{ 权限 java.security.AllPermission; };

  • jmeter-server 文件中的设置:

    -Djava.security.policy=file:/usr/share/jmeter/bin/.java.policy

  • 在 java.policy 文件 (usr/lib/jvm/java-7-openjdk-amd64/jre/lib/security/java.policy) 中设置所有权限

结果,当我在 VM Ubuntu 上启动 jmeter-server 时,似乎一切都很好。我明白了:

log_file=jmeter-server.log java.io.FileNotFoundException: jmeter-server.log     (Permission denied)
[log_file-> System.out]
2016/04/25 17:13:52 INFO  - jmeter.util.JMeterUtils: Setting Locale to en_US
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Loading user properties from:  /usr/share/jmeter/bin/user.properties
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Loading system properties from: /usr/share/jmeter/bin/system.properties
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Setting System property:    java.net.preferIPv4Stack=true
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Setting System property: java.rmi.server.hostname=172.29.148.49
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Setting System property: server_port=1099
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Copyright (c) 1998-2012 The Apache Software Foundation
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Version 2.8.20130705
2016/04/25 17:13:52 INFO  - jmeter.JMeter: java.version=1.7.0_95
2016/04/25 17:13:52 INFO  - jmeter.JMeter: java.vm.name=OpenJDK 64-Bit Server VM
2016/04/25 17:13:52 INFO  - jmeter.JMeter: os.name=Linux
2016/04/25 17:13:52 INFO  - jmeter.JMeter: os.arch=amd64
2016/04/25 17:13:52 INFO  - jmeter.JMeter: os.version=4.2.0-35-generic
2016/04/25 17:13:52 INFO  - jmeter.JMeter: file.encoding=UTF-8
2016/04/25 17:13:52 INFO  - jmeter.JMeter: Default Locale=English (United States)
2016/04/25 17:13:52 INFO  - jmeter.JMeter: JMeter  Locale=English (United States)
2016/04/25 17:13:52 INFO  - jmeter.JMeter: JMeterHome=/usr/share/jmeter
2016/04/25 17:13:52 INFO  - jmeter.JMeter: user.dir  =/usr/share/jmeter/bin
2016/04/25 17:13:52 INFO  - jmeter.JMeter: PWD       =/usr/share/jmeter/bin
2016/04/25 17:13:52 INFO  - jmeter.JMeter: IP: 127.0.1.1 Name: ubuntu FullName: ubuntu
Created remote object: UnicastServerRef [liveRef: [endpoint:[172.29.148.49:45755](local),objID:[-1533104d:1544dc4ef79:-7fff, 2602978299635569139]]]
2016/04/25 17:13:52 INFO  - jmeter.engine.RemoteJMeterEngineImpl: Starting backing engine on 1099
2016/04/25 17:13:52 INFO  - jmeter.engine.RemoteJMeterEngineImpl: IP address=172.29.148.49
2016/04/25 17:13:52 INFO  - jmeter.engine.RemoteJMeterEngineImpl: IP address  is a site-local address; this may cause problems with remote access.
    Can be overridden by defining the system property  'java.rmi.server.hostname' - see jmeter-server script file
2016/04/25 17:13:52 INFO  - jmeter.engine.RemoteJMeterEngineImpl: Creating RMI registry (server.rmi.create=true)
2016/04/25 17:13:52 INFO  - jmeter.engine.RemoteJMeterEngineImpl: Bound to registry on port 1099

但是当我尝试在 Windows 上从客户端(主)运行 Jmeter 时,无论 GUI 模式还是非 GUI 模式,我都会得到下一个错误日志跟踪:

2016/04/25 13:15:58 INFO  - jmeter.engine.DistributedRunner: Configuring remote engine: 172.29.148.49:1099 
2016/04/25 13:15:58 ERROR - jmeter.engine.DistributedRunner: Failed to create engine at 172.29.148.49:1099 java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: org.apache.jmeter.engine.RemoteJMeterEngineImpl_Stub (no security manager: RMI class loader disabled)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at java.rmi.Naming.lookup(Unknown Source)
    at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:54)
    at org.apache.jmeter.engine.ClientJMeterEngine.<init>(ClientJMeterEngine.java:67)
    at org.apache.jmeter.engine.DistributedRunner.createEngine(DistributedRunner.java:237)
    at org.apache.jmeter.engine.DistributedRunner.getClientEngine(DistributedRunner.java:213)
    at org.apache.jmeter.engine.DistributedRunner.init(DistributedRunner.java:91)
    at org.apache.jmeter.gui.action.RemoteStart.doAction(RemoteStart.java:81)
    at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:81)
    at org.apache.jmeter.gui.action.ActionRouter.access$000(ActionRouter.java:40)
    at org.apache.jmeter.gui.action.ActionRouter$1.run(ActionRouter.java:63)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException:  org.apache.jmeter.engine.RemoteJMeterEngineImpl_Stub (no security manager: RMI  class loader disabled)
    at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
    at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
    at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
    at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
    at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
    at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
    at java.io.ObjectInputStream.readClassDesc(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at Java. I. ObjectInputStream. readObject0 (Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    ... 25 more

任何人都可以帮助解决这个问题。

非常感谢。

【问题讨论】:

    标签: java performance jmeter


    【解决方案1】:

    我尝试过的不同组合:

    • 在 Ubuntu 和 Windows 上禁用防火墙

    无关

    • 使用同一个子网

    无关紧要。

    • 在 jmeter-server 文件中设置主机名:
     RMI_HOST_DEF=-Djava.rmi.server.hostname=172.29.148.49
    

    无关紧要。

    • 创建 .java.policy 文件并授予 jmeter/bin 目录中的所有权限:
    grant { permission java.security.AllPermission; };
    

    无关紧要。

    • 在 jmeter-server 文件中设置:
    -Djava.security.policy=file:/usr/share/jmeter/bin/.java.policy
    

    无关紧要。

    • 在 java.policy 文件 (usr/lib/jvm/java-7-openjdk-amd64/jre/lib/security/java.policy) 中设置所有权限

    无关紧要。

    你的做法令人费解。防火墙、子网、主机名、.policy 文件、它的名称和它的内容都与ClassNotFoundExceptions 没有任何关系,无论是单独的还是以任何组合的方式,都令人费解,为什么有人会不这么认为:尤其是在与安全策略操作相关,当错误消息明确指出安装安全管理器时。

    ClassNotFoundException 的解决方案是部署相关的类,到相关的JVM。在这种情况下,客户端。 Jmeter 在一些 JAR 文件中提供了这个类,它是客户端的 CLASSPATH 所必需的。

    【讨论】:

    • 谢谢。我已经尝试过您的解决方案以及任何结果。我在 Java 和 Jmeter 方面不是很好,也许这是一个原因。我的解决方案是:在客户端和服务器上使用相同的 Jmeter 版本。因为默认的 ubuntu Jmeter 版本是 2.8,所以我也在客户端上使用过。它有效。谢谢!
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2012-06-21
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多