Kubernetes环境下JMeter分布式测试无法启动问题求助
问题排查:Kubernetes环境下RMI主从节点任务下发失败
环境架构
- Kubernetes命名空间部署在代理、防火墙及交换机之后
- Master节点向Slave节点下发任务,脚本执行完成后关闭主从节点
- 已配置并启用Network Policy、Ingress和Egress,开放端口范围:60000-60002、1099-1101;防火墙额外开放8000-8002
问题现象
- 测试启动后,Master日志出现7-10分钟停顿
- 后续无测试执行,抛出
java.rmi.ConnectException连接超时错误 - Master日志显示
sun.rmi.transport.tcp.TCPConnection关闭
排查方向及验证方法
1. RMI动态端口未正确固定/放行
RMI默认会随机分配数据传输端口,仅开放注册端口和指定范围不足以确保连通:
- 检查Master/Slave的JVM启动参数,确认是否强制指定RMI数据端口范围:
-Djava.rmi.server.hostname=<集群内部可访问的IP/Service域名> -Drmiregistry.port=1099 -Djava.rmi.server.port=60000-60002 - 验证Network Policy是否允许主从节点之间的双向流量,Slave需要主动回连Master的数据端口,需确保该方向未被拦截
2. 防火墙/代理会话超时触发连接中断
7-10分钟的停顿时间与常见防火墙会话超时阈值(5-10分钟)高度吻合:
- 检查代理、防火墙的TCP会话超时配置,确认是否低于任务初始化所需时间,导致空闲连接被提前关闭
- 确认防火墙是否发送TCP RST包终止超时会话,这种强制切断会直接导致RMI连接异常中断
3. Network Policy规则匹配异常
- 核对Network Policy的
podSelector标签,确保精准匹配Master和Slave Pod,避免标签不匹配导致流量被默认策略拦截 - 用
kubectl describe networkpolicy <policy-name>查看规则详情,确认Egress/Ingress规则同时覆盖RMI注册端口、数据端口及防火墙开放的8000-8002范围 - 检查是否存在
deny-all的全局Network Policy,优先于你的允许规则生效
4. RMI主机名解析失败
- 确认
java.rmi.server.hostname参数设置的是Kubernetes集群内部可访问的地址(如Pod IP、Service域名),而非外部公网地址 - 在Master/Slave Pod内执行
nslookup <对方Service名称>,验证DNS解析是否正常,解析失败会导致RMI连接超时
5. Pod资源不足导致进程停顿
- 检查Master/Slave Pod的CPU、内存资源限制,是否因资源不足引发JVM长时间GC或进程阻塞
- 执行
kubectl describe pod <pod-name>查看Pod事件,确认是否存在OOMKilled或资源不足警告 - 导出JVM GC日志,分析是否存在Full GC停顿导致的无响应
6. 节点关闭逻辑过早触发
- 检查任务脚本逻辑,确认是否在Master下发任务后,未等待Slave确认接收就触发了节点关闭操作
- 验证脚本是否在任务执行完成后才关闭节点,而非在初始化阶段提前终止
内容的提问来源于stack exchange,提问作者Szpindel Szpindel
相关产品推荐
相关产品推荐

