You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JMeter 4.0分布式测试:主节点连接从节点触发RMI连接异常求助

JMeter分布式测试RMI连接超时问题排查方案

我来帮你梳理几个关键的排查方向,这些都是JMeter 4.0分布式测试中触发RMI连接拒绝/超时的常见原因:

1. 未开放RMI随机端口(最常见原因)

JMeter的RMI通信除了固定的1099端口外,还会使用随机临时端口传输测试数据和控制指令,你目前只开放了1099和23,大概率是这个端口被防火墙拦截了。

解决步骤:

  • 在主从节点的jmeter/bin/jmeter.properties中添加以下配置,固定RMI端口:
    # 固定从节点的RMI服务端口(默认1099,可保持不变)
    server.rmi.port=1099
    # 固定从节点的本地RMI端口(用于数据传输)
    server.rmi.localport=50000
    # 固定主节点的本地RMI端口(发起连接时使用)
    client.rmi.localport=50001
    
  • 在主从节点的防火墙中开放5000050001端口的双向出入权限(入站+出站)。
  • 重启主从节点的JMeter服务。

2. RMI证书配置不一致或错误

虽然你创建了rmi_keystore.jks,但需要确保主从节点的证书完全一致,且配置参数正确:

  • 验证主从节点的rmi_keystore.jks是同一个文件(可通过MD5校验确认),密码完全相同。
  • 检查主从节点的jmeter.properties中以下SSL参数是否正确配置:
    server.rmi.ssl.enable=true
    server.rmi.ssl.keystore.file=rmi_keystore.jks
    server.rmi.ssl.keystore.password=你的证书密码
    server.rmi.ssl.truststore.file=rmi_keystore.jks
    server.rmi.ssl.truststore.password=你的证书密码
    
    注意:主节点作为RMI客户端,也需要配置这些参数,不能只在从节点配置。
  • 用Java的keytool命令验证证书有效性:
    keytool -list -keystore rmi_keystore.jks
    
    输入密码后如果能正常列出证书信息,说明证书没问题。

3. 从节点绑定了错误的IP地址

如果从节点有多个网卡(比如有线+无线),JMeter可能会绑定到非预期的IP,导致主节点无法连接:

  • 修改从节点的jmeter/bin/jmeter-server.bat(Windows),添加以下配置:
    set RMI_HOST_DEF=-Djava.rmi.server.hostname=AAA.AAA.AAA.AAA
    
    AAA.AAA.AAA.AAA替换为从节点的实际业务IP(和主节点同一子网的那个IP)。
  • 重启从节点的jmeter-server服务,启动后检查日志是否显示绑定到了正确的IP。

4. 验证端口连通性

直接在主节点测试和从节点的端口连通性,确认防火墙规则是否生效:

  • Windows系统可以用Test-NetConnection命令:
    Test-NetConnection AAA.AAA.AAA.AAA -Port 1099
    Test-NetConnection AAA.AAA.AAA.AAA -Port 50000
    
    如果返回TcpTestSucceeded: True说明端口连通,否则防火墙规则或网络配置有问题。
  • 若连通失败,检查防火墙规则的方向(是否同时开放入站和出站)、规则应用的范围(是否包含当前子网IP)。

5. 主从节点JMeter版本/插件不一致

JMeter的RMI通信对版本一致性要求很高,主从节点的JMeter版本、插件版本必须完全一致:

  • 确认从节点的JMeter版本也是4.0,和主节点完全相同。
  • 检查主从节点的jmeter/lib/ext目录下的插件是否完全一致,避免因序列化类不一致导致连接失败。

6. Java安全策略限制

公司组策略可能修改了Java的安全策略,导致RMI连接被阻止:

  • 编辑主从节点的jmeter/bin/java.policy文件,添加以下权限配置:
    grant codeBase "file://${user.dir}/lib/-" {
        permission java.security.AllPermission;
    };
    grant codeBase "file://${user.dir}/ext/-" {
        permission java.security.AllPermission;
    };
    
  • 重启JMeter服务,确保安全策略生效。

你可以按照这个顺序逐一排查,大概率能解决RMI连接超时的问题。

内容的提问来源于stack exchange,提问作者sam0673

火山引擎 最新活动