运行runnodes启动节点报BridgeControlListener启动失败如何排查
问题现象
执行./build/nodes/runnodes命令启动节点时,系统弹出3个终端窗口运行节点进程,节点未完成启动流程即异常终止,终端输出日志如下:
⚠️ ATTENTION: This node is running in development mode! 👩💻 This is not safe for production deployment. Advertised P2P messaging addresses : localhost:10015 RPC connection address : localhost:10016 RPC admin connection address : localhost:10049 [ERROR] 18:55:22+0100 [main] bridging.BridgeControlListener. - Failure to start BridgeControlListener Shutting down ... [ERROR] 18:55:48+0100 [main] internal.NodeStartupLogging. - Exception during node startup: stop can't be called twice
故障根因
- 节点启动失败的核心触发点是
BridgeControlListener组件启动失败。该组件是Corda节点负责P2P网络通信监听、跨节点消息桥接转发的核心模块,初始化失败会直接触发节点内置的故障停机逻辑。 - 日志末尾抛出的
stop can't be called twice属于次生连带错误,不是启动失败的根本原因:BridgeControlListener启动失败后,节点已经触发了第一次正常停机流程,启动阶段注册的其他生命周期监听器感知到异常状态后重复触发了停机指令,才会抛出该重复调用stop方法的报错。 - 实际场景中触发BridgeControlListener启动失败的常见原因:
- 日志中列出的三个节点监听端口(P2P端口10015、RPC端口10016、RPC管理端口10049)被残留的旧节点进程、其他本地运行程序占用
- 节点上一次异常退出时未正常释放端口占用,也没有清理工作目录下的pid进程锁文件,导致新启动的进程无法完成端口绑定
- 开发模式下节点的本地通信证书、node.conf配置文件损坏,导致桥接监听器无法完成初始化流程
修复方案
- 先执行端口占用检查,确认三个端口没有被其他进程占用,执行命令:
lsof -i :10015 -i :10016 -i :10049
如果命令返回存在残留占用进程,直接终止对应进程释放端口。 - 清理每个节点工作目录下的
.pid进程锁文件、logs缓存目录后,重新执行启动命令。 - 如果是本地多节点组网测试场景,逐一核对每个节点目录下的
node.conf配置文件,确认不同节点配置的P2P、RPC端口不存在重复冲突。
内容的提问来源于stack exchange,提问作者Afronoa
相关产品推荐
相关产品推荐

