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

How to fix java.io.NotSerializableException: org.apache.jmeter.JMeter$ListenToTest in JMeter?

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

ERROR o.a.j.u.JMeterUtils: Error in rconfigure() method java.rmi.MarshalException: error marshalling arguments; nested exception is: java.io.NotSerializableException: org.apache.jmeter.JMeter$ListenToTest

我可以用其他端口管理,只有这个给我带来麻烦。 我正在使用非 GUI 模式。 如何修复 this/specify 端口?

来自主人的日志:

[...]

ERROR o.a.j.e.ConvertListeners: RemoteException occurred while replacing Remotable item. java.rmi.server.ExportException: Listen failed on port: 4453; nested exception is: java.io.IOException: Could not bind to XXX/XXX.XXX.XXX.XXX using port 4453

[...]

Caused by: java.io.IOException: Could not bind to XXX/XXX.XXX.XXX.XXX using port 4453 at org.apache.jmeter.rmi.SSLRMIServerSocketFactory.createServerSocket(SSLRMIServerSocketFactory.java:139) ~[ApacheJMeter_core.jar:5.1.1 r1855137] at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(Unknown Source) ~[?:1.8.0_231] ... 22 more Caused by: java.net.BindException: Address already in use: JVM_Bind

[...]

ERROR o.a.j.e.ClientJMeterEngine: Error in rconfigure() method java.rmi.MarshalException: error marshalling arguments; nested exception is: java.io.NotSerializableException: org.apache.jmeter.JMeter$ListenToTest at sun.rmi.server.UnicastRef.invoke(Unknown Source) ~[?:1.8.0_231]

[...]

jmeter.properties 主控:

[...]

remote_hosts=XXX.XXX.XXX.XXX:4454

[...]

client.rmi.localport=4451

[...]

jmeterengine.nongui.port=4448

[...]

编辑: 由于评论中的问题,将 JMeter 更改为 5.2 版。

这个错误:

Address already in use: JVM_Bind

清楚地表明 Java 试图使用特定的 network port which is used by this or another process, consider using netstat 程序来识别持有该端口的进程并终止该进程或选择另一个端口。

请注意 RemoteThreadsListenerImpl uses some offset 因此实际端口将高于您通过 属性 指定的端口。

不幸的是,您不太清楚要在 JMeter Master 和 Slave 机器上使用哪些端口,所以在此期间我只能建议熟悉以下资料:

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

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