面向:Pi Node 已经跑起来、但区块高度长期落后、界面一直转圈的人。
结论先行:绝大多数「追不上块」不是你的机器不行,而是历史块找不到地方下。
先把现象说准
很多人说的是"节点卡住了",但其实是几种完全不同的状态,处理方式也完全不同:
| 界面表现 | 实际在做什么 | 常见原因 | |---|---|---| | 一直 19/21、区块高度不动 | 在追历史 checkpoint,但源头下不动 | 归档服务器连不上 / 太慢 | | 区块高度在涨,但越落越远 | 能追上新的,补不上旧的 | 带宽不足 / 磁盘 IO 慢 | | 高度完全不动,日志没动静 | 容器没起来或进程死了 | Docker / 配置问题 | | 时好时坏,反复归零 | 长时间离线后重新同步 | 数据卷损坏或被清理 |
先分清是哪一种,再动手。 下面主要讲第一种,因为它最常见,也最容易被误判成"机器太差"。
它到底在等什么
Pi 节点底层的 stellar-core 需要"历史归档"(history archive)来获取历史账本, 会按配置里的地址去下历史块,全都不行就反复重试。
配置文件在这里:
C:\Users\你的用户名\AppData\Roaming\Pi Network\docker_volumes\stellar\core\etc\stellar-core.cfg关键点:公共归档在高峰期经常很慢,甚至间歇性不可用。 这时候你看到的"卡在 19/21",本质是它在等一个下不动的地址,跟你的 CPU 主频、内存大小基本无关。
所以第一件该做的事不是加内存、不是换机器,而是确认下载通道本身通不通。
怎么判断你的节点到底卡在哪
与其反复重启试运气,不如先看三个数。
1. 节点自己认为同步好了吗
docker exec testnet2 curl -s localhost:11626/info | grep state看到 "state": "Synced!" 才算真的同步完成;一直显示 Catching up 说明还在追。
2. 落后多少
docker exec testnet2 curl -s localhost:11626/info | grep -o '"num":[0-9]*'和官方区块浏览器上的高度对比,差值就是你落后多少块。
3. 归档下载是不是真的在推进
docker exec testnet2 grep "Published history" /tmp/stellar-core.log | tail -5这一条一直不动,说明下载通道本身有问题,而不是你追得慢。
三个真正能改善的方向
这里不给"照做就解决"的配方 —— 每人的网络、机器、节点规模都不同, 同一个办法在别人机器上有效,在你机器上未必。但这三个方向的投入产出比是有共识的:
方向一:先测归档源的真实速度
配置改十遍,不如直接量一次下载耗时:
time curl -sf -o /dev/null "https://归档源/.well-known/stellar-history.json"同一时段多测几个源,取最快的。这一步不需要任何高级配置,但能立刻排除"源本身就慢"。
方向二:排除磁盘 IO 瓶颈
追块是「下载 + 写入 + apply」的连续动作,磁盘慢会直接拖死全流程。
df -h # 空间是否接近满
iostat -x 5 3 # 看 %util%util 长期贴着 100 就是磁盘瓶颈 —— 换 SSD 的收益大于改任何配置。 另外硬盘快满时性能会断崖式下降,留足空间比什么都重要。
方向三:确认端口可达性完整
这条最容易被忽略,而且不报错。Pi 节点的入站端口是 31400-31409 共 10 个, 少开几个节点照样跑、区块照样涨,但入站可达性不完整,表现就是"能同步但表现不如别人"。
# 从另一台公网机器测,本机测 localhost 没意义
IP=你的公网IP
for p in $(seq 31400 31409); do
timeout 3 nc -zv "$IP" "$p" >/dev/null 2>&1 && echo "$p 通" || echo "$p 不通 ★"
done十个全通才算完整。不通就回去查:路由器转发 → 主机防火墙 → 云安全组,三层都要过。
什么情况下该停止折腾
如果出现这几种情况,说明问题不在你能控制的范围内:
- 节点一直报版本相关错误(如
unsupported ledger version)→ 网络升级了,等官方发新镜像 - 磁盘反复写满 → 硬件规格不够,该换机器
- 追块速度长期是个位数块/秒 → 到归档源的链路太差
- 折腾超过一周还没追上 → 时间成本已经超过托管费用
不要因为"自己搭的"就一直硬扛。时间也是成本。
如果你跑的是多台节点,还有个绕不开的现实:同一个公网 IP 只能让一台节点「可达」, 多节点必须多 IP,这本身就是一笔成本。到这个规模,"自己折腾"的时间成本通常已经 超过直接买托管服务的钱。
---
