【问题标题】:How to fix java.io.NotSerializableException: org.apache.jmeter.JMeter$ListenToTest in JMeter?如何在 JMeter 中修复 java.io.NotSerializableException: org.apache.jmeter.JMeter$ListenToTest?
【发布时间】:2019-11-08 17:24:41
【问题描述】:

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

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

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

来自主人的日志:

[...]

错误 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(Unknown Source) ~[?:1.8.0_231]

[...]

主控上的jmeter.properties:

[...]

remote_hosts=XXX.XXX.XXX.XXX:4454

[...]

client.rmi.localport=4451

[...]

jmeterengine.nongui.port=4448

[...]

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

【问题讨论】:

  • 它明确指出:您尝试绑定的端口已在使用中。再来一个,有什么大不了的。
  • 我通过 netstat 进行了双重检查,并且我试图绑定的端口没有被使用...顺便问一下,你能告诉我为什么 JMeter 试图绑定端口号 my_number+2 吗?这是正常行为吗?还是这只是日志记录错误?
  • "我通过 netstat 再次检查,我尝试绑定的端口未在使用中。" - 好的,我明白了,但是您尝试过不同的端口集吗?
  • "...为什么 JMeter 试图绑定端口号 my_number+2" - 好问题,老实说我现在还不知道答案
  • @YuriG 是的,我试过了......毕竟我尝试了新版本(5.2)的 JMeter - 绑定端口号 my_number+2 的问题已解决,但不是我的主要问题......这可能是这个版本(5.1.1)的 JMeter 或我的安装有问题 - 应该检查 sha sum...

标签: java jmeter distributed-testing


【解决方案1】:

这个错误:

Address already in use: JVM_Bind

清楚地表明 Java 试图使用特定的network port 被这个或另一个进程使用,考虑使用netstat 程序来识别持有该端口的进程并终止该进程或选择另一个端口。

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

不幸的是,目前还不清楚您想在 JMeter Master 和 Slave 机器上使用哪些端口,因此我只能建议您熟悉以下材料:

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

【讨论】:

  • 感谢您提供此链接,它对我帮助很大。
【解决方案2】:

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

【讨论】:

  • Disabling the secure channel among client and servers 的意思是设置server.rmi.ssl.disable=false 禁用ssl?
  • @DarkStar1 不,是server.rmi.ssl.disable=true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2021-12-16
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多