如何修复JMeter中的java.io.NotSerializableException:org.apache.jmeter.JMeter $ ListenToTest?

时间:2019-11-08 17:24:41

标签: java jmeter distributed-testing

我正在尝试使用JMeter 5.1.1进行分布式测试。我使用了here中的手册,但是在指定用于从服务器(从属)到客户端(主)的连接的端口时遇到了问题。当我使用client.rmi.localport时  在主服务器上的jmeter.properties中,出现以下错误:

  

错误o.a.j.u.JMeterUtils:rconfigure()方法中的错误   java.rmi.MarshalException:错误编组参数;嵌套的   异常是:java.io.NotSerializableException:   org.apache.jmeter.JMeter $ ListenToTest

我能够用其他端口进行管理,只有这一点给我带来麻烦。 我正在使用nonGUI模式。 如何修复此/指定端口?

来自主服务器的日志:

  

[...]

     

错误o.a.j.e.ConvertListeners:RemoteException发生在   替换可移动项。 java.rmi.server.ExportException:侦听   端口失败:4453;嵌套的异常是:java.io.IOException:   无法使用端口4453绑定到XXX / XXX.XXX.XXX.XXX

     

[...]

     

原因:   java.io.IOException:无法使用端口绑定到XXX / XXX.XXX.XXX.XXX   在4453   org.apache.jmeter.rmi.SSLRMIServerSocketFactory.createServerSocket(SSLRMIServerSocketFactory.java:139)   〜[ApacheJMeter_core.jar:5.1.1 r1855137]在   sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(未知来源)   〜[?:1.8.0_231] ... 22更多原因:java.net.BindException:地址   已经在使用:JVM_Bind

     

[...]

     

错误o.a.j.e.ClientJMeterEngine:错误   在rconfigure()方法java.rmi.MarshalException中:错误编组   参数;嵌套的异常是:java.io.NotSerializableException:   org.apache.jmeter.JMeter $ ListenToTest位于   sun.rmi.server.UnicastRef.invoke(未知来源)〜[?:1.8.0_231]

     

[...]

master上的jmeter.properties:

  

[...]

     

remote_hosts = XXX.XXX.XXX.XXX:4454

     

[...]

     

client.rmi.localport = 4451

     

[...]

     

jmeterengine.nongui.port = 4448

     

[...]

编辑: 由于注释存在问题,已将JMeter更改为5.2版。

2 个答案:

答案 0 :(得分:0)

此错误:

Address already in use: JVM_Bind

清楚地表明Java尝试使用该进程或另一个进程使用的特定network port,请考虑使用netstat程序来标识持有端口的进程,然后终止该进程或选择另一个进程港口。

请注意,RemoteThreadsListenerImpl使用了一些offset,因此实际端口将高于通过属性指定的端口。

不幸的是,不清楚要在JMeter Master和Slave机器上使用哪个端口,因此与此同时,我只能建议您熟悉以下材料:

后一个示例提供了使用自定义端口进行结果转发的示例。

答案 1 :(得分:0)

禁用客户端和服务器之间的安全通道对我有帮助-我不再遇到此错误,可以指定端口。但是,我建议仅在您的环境(客户端和服务器)都在专用网络中工作时才这样做。