Ignite启动时出现挂起(等待)问题技术问询
Ignite启动挂起问题分析
Ignite启动时出现持续等待的挂起现象,对应的线程栈信息如下:
"fm.ignite.monitor-69-1" #285 优先级=5 系统优先级=0 CPU耗时=35865.92ms 运行时长=83153.67s 线程ID=0x000055a415a850e0 本地线程ID=0x17f1c 处于Object.wait()状态 [0x00007f3cc5fd3000] java.lang.Thread.State: 定时等待(在对象监视器上) at java.lang.Object.wait(本地方法) at org.apache.ignite.spi.discovery.tcp.ServerImpl.joinTopology(ServerImpl.java:1186) - 已锁定 <0x00000006f3b3f140> (一个java.lang.Object对象) at org.apache.ignite.spi.discovery.tcp.ServerImpl.spiStart(ServerImpl.java:472) at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.spiStart(TcpDiscoverySpi.java:2210) at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:278) at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.start(GridDiscoveryManager.java:1089) at org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1766) at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1147) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1799) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1721) - 已锁定 <0x00000006924b2580> (一个org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance对象) at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1160) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:656) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:578) at org.apache.ignite.Ignition.start(Ignition.java:328) at com.huawei.cloudsop.ignite.IgniteManager.start(IgniteManager.java:56) at com.huawei.iemp.fmdataservice.monitor.ignite.AlarmIgnite.getOrCreateCache(AlarmIgnite.java:115) at com.huawei.iemp.fmdataservice.monitor.ignite.dao.CurrentAlarmDaoImpl.startIgnite(CurrentAlarmDaoImpl.java:130) at com.huawei.iemp.fmdataservice.monitor.ignite.dao.IgniteMonitorTask.reStartIgnite(IgniteMonitorTask.java:75) at com.huawei.iemp.fmdataservice.monitor.ignite.dao.IgniteMonitorTask.run(IgniteMonitorTask.java:60) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750)
问题根源
从线程栈可以明确看出,Ignite节点卡在了TCP发现SPI的ServerImpl.joinTopology方法的等待逻辑中,本质是节点无法成功加入集群拓扑。
常见原因及解决建议
- 网络连通性问题:节点间TCP发现端口(默认47500-47509)未开放,导致无法与集群其他节点通信。
- 解决:用
telnet或nc命令测试节点间端口连通性,确保端口能正常访问。
- 解决:用
- 发现配置错误:
TcpDiscoverySpi的IP finder配置有误,比如种子节点地址错误、不可达。- 解决:检查
TcpDiscoveryVmIpFinder等IP finder的种子节点配置,确认地址正确且节点处于运行状态。
- 解决:检查
- 防火墙/安全组限制:节点间通信被防火墙、安全组拦截。
- 解决:调整防火墙或安全组规则,开放Ignite发现端口及通信端口。
- 集群节点异常:现有集群节点状态异常,无法响应新节点的加入请求。
- 解决:查看集群其他节点的日志,排查是否有拓扑故障、节点宕机等问题。
- 超时时间不足:节点加入拓扑的超时时间设置过短。
- 解决:通过
TcpDiscoverySpi.setJoinTimeout()方法增加超时时间,给节点足够时间完成拓扑加入。
- 解决:通过
内容的提问来源于stack exchange,提问作者biandeqiang
相关产品推荐
相关产品推荐

