以太坊节点同步卡在100%无法完成,寻求技术协助
以太坊节点同步进度100%但无法完成的排查方案
1. 确认Geth真实同步状态
Geth显示synced=100%却仍有ETA,大概率是在执行状态快照生成或后期收尾操作,并非完全同步。执行命令验证:
geth attach http://localhost:8545 --exec 'eth.syncing'
返回false表示执行层同步完成;若返回含currentBlock的对象,说明仍在同步流程中。
2. 修正Prysm执行端点的格式错误
你的Prysm启动命令中--execution-endpoint参数缺少://,会导致共识层无法连接执行层,这是常见的卡同步原因。正确命令:
./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551/ --jwt-secret=/root/prysm/jwt.hex --suggested-fee-recipient=x0MyPK
3. 验证JWT密钥一致性
确保Geth和Prysm使用完全相同的JWT密钥文件:
- 检查密钥文件存在性:
ls -l /root/prysm/jwt.hex - 确认两个客户端指定的密钥路径完全一致,且进程拥有文件读取权限。
4. 切换Geth同步模式
Geth默认快速同步在网络差时易卡住,建议切换为更高效的快照同步(Geth 1.10.0+支持):
geth --http --http.api eth,net,engine,admin --authrpc.jwtsecret /root/prysm/jwt.hex --syncmode snap
5. 检查网络与节点连接
- 查看Geth节点的peer数量,过少会拖慢同步:
若数量不足,确保TCP 30303端口对外开放,可手动添加官方节点提升连接数。geth attach http://localhost:8545 --exec 'net.peerCount' - Prysm日志显示
activePeers=40,这部分连接正常,重点排查执行层网络。
6. 清理损坏数据后重新同步
若以上步骤无效,可能是本地链数据损坏,清理后重新同步:
# 停止Geth进程 pkill geth # 清理Geth数据目录(注意备份重要数据) rm -rf /var/lib/goethereum/geth/chaindata rm -rf /var/lib/goethereum/geth/triecache # 用快照同步重启Geth geth --http --http.api eth,net,engine,admin --authrpc.jwtsecret /root/prysm/jwt.hex --syncmode snap
日志补充说明
- Geth的
synced=100%但ETA未消失,是在处理状态数据,这一步耗时取决于磁盘IO性能,可能需要数小时。 - Prysm日志显示正常同步区块,但必须等执行层完全同步后,整个节点才能进入正常运行状态。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

