活连接的体检报告:LND listpeers 的读数与 list_errors 开关 图 1
活连接的体检报告:LND listpeers 的读数与 list_errors 开关 · 图 1

闪电节点排障的第一现场往往不是日志,而是一条已建立的连接。LND 的 listpeers 列出的正是这些”当前活着”的对端:v0.19.0-beta 源码 cmd/commands/commands.go 里它的 Usage 只有一句——“列出所有活动的、当前已连接的对端”。看似一张名册,读透返回字段之后,它其实是整个节点最密集的体检报告。

默认视图与 list_errors

命令只有一个开关:list_errors。实现细节在源码的动作函数里:默认调用向节点请求每位对端的”最新一条错误”,加上 list_errors 则改为索取完整的近期错误集合。两种形态的差别在排障方向上很关键——“这位邻居最近一次抽风是什么时候、抽的是什么”用默认视图就够;怀疑某位对端反复出错、想统计错误谱系时才值得上全量集合,因为错误集可能相当长。注意语义:列出的错误来自协议层记录(例如 onion message、gossip 或通道级的 error 消息),它证明”对方或链路说过错话”,不自动构成责任认定。

活连接的体检报告:LND listpeers 的读数与 list_errors 开关 图 2
活连接的体检报告:LND listpeers 的读数与 list_errors 开关 · 图 2

每位对端身上的一串读数

对端对象里能读出几类信息。身份类:pub_key 与网络地址,地址形如 127.0.0.1:10011 说明连接经过本地代理(Tor 场景的常态),不是配置写错。流量类:bytes_sent 与 bytes_recv 记录这台机器与该对端互传的字节数——gossip 风暴、异常大消息、单一对端吃掉大半带宽,都逃不过这两个计数。资金类:sat_sent 与 sat_recv 是流经该对端的聪数统计,对账与转发审计常从它起手。拓扑类:inbound 标记该通道的出资方向是谁发起的,“我是不是在被动给别人当梯子”看它。链路质量类:ping_time 是往返延迟。同步类:sync_type 描述通道图的补课状态——ACTIVE_SYNC 表示还在持续从该对端收到图更新,PASSIVE_SYNC 表示图数据要靠其他方式补,UNKNOWN_SYNC 表示节点也说不清;怀疑图谱落后、节点”看不见新通道”时,扫描全场 sync_type 是第一刀。

三个使用场景

场景一:付款反复卡在”对端无响应”。listpeers 先确认目标通道两端是否真在线——通道在 listchannels 里显示 active 只代表上次公告如此,活连接以 peers 为准。场景二:带宽异常。按 bytes_recv 排序找异常大户,配合日志定位是 gossip 还是某条通道的重传。场景三:图谱落后。全场 sync_type 只有一两个 ACTIVE 甚至全 PASSIVE,说明你的图新鲜度依赖的少数对端不健康,先解决连接多样性再谈路由失败。

与名册类命令的分界

peers(同族另一条命令)与 listpeers 常被混用,后者的差异点在自带错误字段的体检属性;getnodeinfo 是拿着公钥去图上查一个人的档案,连接与否无关;listnodes 是整个已知节点名录。区分它们的钥匙始终是那条老话:图上说存在,不等于线上连着;线上连着,不等于图上敢用。

一条命令的十五秒体检流程

把排障压缩成一个固定动作:先 listpeers 裸跑,数一数在线对端数量与通道预期是否匹配;第二遍带 list_errors,扫一眼有没有同一个对端公钥反复出现在错误集里;第三遍只筛 ping_timesync_type 两列——延迟异常高或同步长期 UNKNOWN/PASSIVE 的连接,就是图谱与付款问题的共同嫌疑人。三遍跑完大约十五秒,结论通常一句话:要么连接面太窄,要么某个对端不健康,要么两样都占。把这三遍输出重定向存档,隔一周再对比一次,节点连接结构的漂移会自己浮出水面——闪电网络里多数慢性问题,都是连接面先烂、付款后来才疼。

把这份体检做扎实还有个副作用:你会开始熟悉自己节点在图谱里的”朋友圈”长什么样——哪几家是常年在册的老对端、哪几条连接是上周实验留下的。对端列表的漂移本身也是信号,图谱公告规则调整、某台大路由商重启、某个城市的机房故障,都会先反映在你的连接名单上,然后才轮到转发收入的曲线。看久了,listpeers 的一张表比任何监控面板都早一步报警。

风险提示:本文描述节点诊断命令的机制,不构成任何投资建议;命令输出反映执行时刻的连接状态,转瞬即变,结论请以复测为准。