JMeter分布式测试端口监听失败问题及版本兼容性咨询
关于JMeter分布式测试的问题:Java版本差异影响与端口监听失败解决
我正在进行JMeter分布式测试,配置了server_ssi_rmi_disable=true来跳过密钥生成,也未运行create-rmi-keystore.bat,但启动远程测试时从机JMeter服务器日志出现如下错误:
java.rmi.server.ExportException: Listen failed on port: 0; nested exception is: java.io.FileNotFoundException: rmi_keystore.jks (The system cannot find the file specified) at sun.rmi.transport.tcp.TCPTransport.listen(Unknown Source) ~[?:1.8.0_251] at sun.rmi.transport.tcp.TCPTransport.exportObject(Unknown Source) ~[?:1.8.0_251] at sun.rmi.transport.tcp.TCPEndpoint.exportObject(Unknown Source) ~[?:1.8.0_251] at sun.rmi.transport.LiveRef.exportObject(Unknown Source) ~[?:1.8.0_251] at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source) ~[?:1.8.0_251] at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source) ~[?:1.8.0_251] at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source) ~[?:1.8.0_251] at java.rmi.server.UnicastRemoteObject.<init>(Unknown Source) ~[?:1.8.0_251] at org.apache.jmeter.engine.RemoteJMeterEngineImpl.<init>(RemoteJMeterEngineImpl.java:68) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.engine.RemoteJMeterEngineImpl.startServer(RemoteJMeterEngineImpl.java:74) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.JMeter.start(JMeter.java:441) ~[ApacheJMeter_core.jar:5.5] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_251] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_251] at org.apache.jmeter.NewDriver.main(NewDriver.java:259) ~[ApacheJMeter.jar:5.5] Caused by: java.io.FileNotFoundException: rmi_keystore.jks (The system cannot find the file specified) at java.io.FileInputStream.open0(Native Method) ~[?:1.8.0_251] at java.io.FileInputStream.open(Unknown Source) ~[?:1.8.0_251] at java.io.FileInputStream.<init>(Unknown Source) ~[?:1.8.0_251] at java.io.FileInputStream.<init>(Unknown Source) ~[?:1.8.0_251] at org.apache.jmeter.rmi.SSLRMIServerSocketFactory.loadStore(SSLRMIServerSocketFactory.java:147) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.rmi.SSLRMIServerSocketFactory.createServerSocket(SSLRMIServerSocketFactory.java:99) ~[ApacheJMeter_core.jar:5.5] at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(Unknown Source) ~[?:1.8.0_251]
系统版本信息:主从机JMeter版本均为5.5;主机Java版本为1.8.0_241,从机Java版本为1.8.0_251。
一、Java版本差异是否影响主从通信?
同属Java 8的小版本差异(_241 vs _251),一般不会直接导致通信失败:
- Java小版本更新以安全补丁、小功能修复为主,核心RMI通信机制未发生变更
- 若小版本涉及SSL/TLS协议、加密算法的默认配置变更,可能间接影响加密通信,但你已禁用SSI RMI,此影响可忽略
- Java 8的_241和_251无已知RMI相关的关键bug,极端异常概率极低
二、端口监听失败(找不到rmi_keystore.jks)的解决方法
错误核心是:即使配置了server_ssi_rmi_disable=true,从机仍尝试加载RMI密钥库文件,说明配置未生效或存在强制启用SSL的冲突设置,按以下步骤排查:
确认配置正确应用
- 检查从机
jmeter.properties或user.properties文件,确保server_ssi_rmi_disable=true无注释符号(#),且配置项未被覆盖 - 启动从机JMeter服务器时,通过命令行强制指定配置:
Windows:jmeter-server.bat -Jserver_ssi_rmi_disable=true
Linux:jmeter-server -Jserver_ssi_rmi_disable=true
- 检查从机
检查冲突配置
- 查看是否设置了
server.rmi.ssl.disable=false,此配置优先级高于server_ssi_rmi_disable,需改为server.rmi.ssl.disable=true - 确认系统环境变量
JMETER_OPTS中是否存在RMI SSL相关参数(如-Djavax.net.ssl.keyStore=rmi_keystore.jks),若有需删除
- 查看是否设置了
临时替代方案
若配置仍不生效,可手动生成密钥库:运行create-rmi-keystore.bat(Windows)或create-rmi-keystore.sh(Linux),将生成的rmi_keystore.jks放到从机JMeter的bin目录下,快速解决文件缺失问题。
内容的提问来源于stack exchange,提问作者Anbu
相关产品推荐
相关产品推荐

