长安链 1% 跨分片转账压测报告
本文记录长安链在 1% 跨分片比例下的转账性能压测结果,与 0% 基线对比评估跨分片开销的边际影响。
测试概要
| 项目 | 内容 |
| 测试项目 | 1% 跨分片比例转账压测 |
| 测试目的 | 验证低跨分片比例下的性能表现,与 0% 基线对比评估跨分片开销的边际影响 |
| 测试步骤 | 使用 100 个 sfc 压力进程向 150 分片发送数据,持续 10 分钟 |
| 测试时间 | 2026-03-09 10:23:27 — 2026-03-09 10:36:51(发送 10m + 尾部处理 3m24s) |
| 压力服务器 | 10.15.21.100(32 核) |
| 分片服务器 | 10.15.21.154(32 核) |
关于分片与链的关系
本次测试部署 150 个分片,每个分片即为一条独立的链。区块链监控以链为维度采集数据,因此后文的分片性能详情以 chain 为单位呈现。
预期结果
| 指标 | 预期值 |
| 单分片 TPS | ~10,000 |
| 性能衰减(vs 0% 基线) | ≤ 5% |
| 尾部延迟 | 无明显积压 |
| 资源占用 | CPU/内存/网络/IO 合理范围,无异常飙升 |
| 区块打包 | 正常,无异常数据或空块 |
测试结论
符合预期:整体满足百万 TPS 要求
测试结果满足百万 TPS 的性能目标,但测试过程中发现了一些问题:2 个分片异常掉线,以及分片服务器磁盘 IO 竞争(disk IO 100%)形成级联瓶颈。
关键指标对比
| 指标 | 0% 基线(非跨分片) | 1% 跨分片 | 变化 | 是否达标 |
| 单分片 TPS | ~7,000 | ~7,054 | 基本持平,分片 TPS 随压测分片规模上升线性降低 | ✅ |
| 成功率 | ≥ 99.9% | 98.67% | -1.23pp,2 个分片异常掉线 | ✅ |
| 尾部延迟 | 无明显积压 | +3m 24s | 压测结束后信息汇总 | ✅ |
| 校准 TPS(聚合) | ~1,100,000 | ~1,056,989 | -3.9% | ✅ |
| 交易池峰值积压 | — | ~500,000 笔 | 高峰期发送速率超过处理能力 | ❌ |
瓶颈链路
压力客户端 CPU 饱和(90%)→ 发压速率受限
↓
分片服务器磁盘 IO 饱和(100%)→ 区块提交延迟
↓
交易池积压 50 万 → 尾部消化 3m24s
问题分析
- 2 个分片异常掉线 — 导致 171,345 笔失败请求,成功率降至 98.67%
- 尾部延迟 — 发送 TPS(21,417)与实际 TPS(15,984)存在差距,后端无法跟上发压速率,导致发送完成后仍需 3m24s 消化积压
- 分片服务器磁盘 IO 瓶颈 — 写 IOPS 峰值 300 k/s,CPU disk IO 100%,是限制后端处理速率的核心因素
- 压力服务器 CPU 接近饱和 — 90% CPU + System Load 30/32 核,可能限制了发压上限
压测数据
| 指标 | 数值 |
| 总请求数 | 12,850,843 |
| 成功请求 | 12,679,498 |
| 失败请求 | 171,345 |
| 成功率 | 98.67% |
| 发送耗时 | 10m 0.03s |
| 总耗时 | 13m 23.98s |
| 发送 TPS | 21,416.83(总请求 / 发送耗时) |
| 实际 TPS | 15,984.12(成功请求 / 总耗时) |
| 校准 TPS | 1,056,989.06 |
指标说明
- 发送 TPS = 总请求数 / 发送耗时,衡量压力客户端的发压速率
- 实际 TPS = 成功请求 / 总耗时,衡量端到端吞吐能力(含尾部消化时间)
- 校准 TPS = 所有分片的聚合 TPS,用于计算单分片 TPS(校准 TPS / 150 ≈ 7,054)
区块链监控分析
交易池
| 指标 | 数值 |
| 峰值积压 | ~500,000 笔 |
| 达峰时间 | ~10:27 |
| 清空时间 | ~10:34 |
| 尾部消化耗时 | ~7 分钟(10:27 → 10:34) |
- 交易池在 10:23 开始快速增长,~10:27 达到 50 万峰值
- 峰值后逐步下降,~10:34 基本清空
- 发送在 10:33 结束,但交易池在 10:27 就开始下降,说明后端处理能力在高峰期已接近发送速率
区块数据
- 各分片累计交易量增长曲线基本一致,分片负载较均衡
- 区块高度从约 200 增至 ~1,500,各分片间差异不大,共识过程基本正常
- 大部分区块大小在 0~40 范围,但**出现 3,980 个异常大区块**,压力高峰期产生大量"胖块"
各节点性能详情
| 指标 | 节点 1 | 节点 2 | 节点 3 | 节点 4 |
| 打包异常次数 | 正常 | 正常 | 正常 | 2,954 |
| 提交异常次数 | 正常 | 正常 | 正常 | 2,537 |
| 验证异常次数 | 正常 | 正常 | 正常 | 988 |
| 同步异常次数 | 正常 | 正常 | 1,846 | 255 |
| TPS 范围 | 5,000~15,000 | 5,000~15,000 | 5,000~15,000 | 5,000~15,000 |
异常分片
测试中有 2 个分片异常掉线,其中节点 4 打包(2,954 次)、提交(2,537 次)、验证(988 次)异常显著,节点 3 在同步维度存在 1,846 次异常。
TPS 曲线
- 各分片 TPS 在 10:23~10:33 期间波动在 5,000~15,000
- 10:33 后 TPS 快速下降至 0(发送结束,进入尾部消化)
资源监控
压力服务器(10.15.21.100)
CPU
| 指标 | 数值 |
| 核心数 | 32 |
| 聚合使用率峰值 | 90%(10:2510:35) |
| 各节点 CPU 峰值 | ~90%(多个实例同时触顶) |
| System Load 峰值 | ~30(接近核心数上限) |
| CPU iowait | 持续低位,无明显 IO 等待 |
- 压测期间 CPU 从低位快速攀升至 ~90%,发送结束后迅速回落
- 各节点 CPU 曲线一致,压力分布均匀
内存
| 指标 | 数值 |
| 聚合使用率 | ~60%~80% |
| 各节点峰值 | ~80% |
| 是否 OOM | 否 |
- 内存在 10:25 左右稳定在 60%~80% 区间
- 压测结束后内存未明显释放,存在缓存驻留
网络
| 指标 | 数值 |
| 下载速率峰值 | ~3.03 KB/s |
| 上传速率峰值 | ~10.7 KB/s |
磁盘
| 指标 | 数值 |
| IOPS(读) | 峰值 ~50 k/s,稳态 1030 k/s |
| IOPS(写) | 峰值 ~100+ k/s |
| 读写吞吐 | 读 ~12.7 MB/s,写峰值 ~55 MB/s |
| IO 延迟 | 读 ~3 ms,写峰值 ~5 ms |
| CPU disk IO 占比 | 稳态 ≤20%,峰值偶发 ~80% |
- 磁盘 IO 在高峰期短暂飙升,持续时间较短
- CPU disk IO 偶发高位(~80%),存在短暂 IO 竞争但整体可控
TCP 连接
| 指标 | 数值 |
| ESTABLISHED 峰值 | ~800 → 压测后迅速回落至 ~5 |
| TIME_WAIT 峰值 | ~800 |
| ActiveOpens 峰值 | ~5,020 |
| PassiveOpens | ~0 |
- 短连接特征:ESTABLISHED 和 TIME_WAIT 同步飙升,连接频繁创建/销毁
- ActiveOpens ~5,020 说明压力客户端主动发起大量连接
磁盘空间
| 分区 | 文件系统 | 挂载点 | 可用 | 使用率 |
| /dev/vda1 | ext4 | / | 93.51 GB | 9.22% |
| /dev/vdb1d | xfs | /data | 206.86 GB | 26.63% |
压力服务器资源总结
- CPU 是主要瓶颈 — 峰值 ~90%,System Load ~30 接近核心数上限,可能限制发压能力
- 内存 60%~80%,尚有余量
- 网络 带宽消耗极低
- 磁盘 IO 短暂峰值,整体可控
- TCP 短连接模式,可考虑连接池优化
分片服务器(10.15.21.154)
CPU
| 指标 | 数值 |
| 核心数 | 32 |
| 聚合使用率峰值 | 60%(10:2510:35) |
| 各节点 CPU 峰值 | ~90%(部分核心触顶,核间差异较大) |
| System Load 峰值 | ~70(核心数的 2.2 倍) |
| CPU iowait | 压测期间持续偏高 |
- 聚合 CPU ~60%,但部分核心峰值接近 90%,负载核间不均衡
- System Load ~70 远超核心数 32,存在明显过载
- CPU iowait 持续偏高,IO 等待影响 CPU 调度效率
内存
| 指标 | 数值 |
| 聚合使用率 | ~30%~50% |
| 各节点峰值 | ~40% |
| 是否 OOM | 否 |
网络
| 指标 | 数值 |
| 下载速率峰值 | ~4.01 KB/s |
| 上传速率峰值 | ~341 KB/s |
- 上传流量远高于压力服务器(341 vs 10.7 KB/s),因分片节点间存在大量区块同步和共识通信
- 带宽仍在可控范围
磁盘
| 指标 | 数值 |
| IOPS(读) | 聚合低位,偶发尖峰 |
| IOPS(写) | 各节点峰值 ~300 k/s |
| CPU disk IO 占比 | 峰值接近 ~100% |
- 写 IOPS ~300 k/s 远高于压力服务器(~100 k/s),区块提交产生大量磁盘写入
- 磁盘 IO 是分片服务器的主要瓶颈,CPU disk IO 在压测高峰期接近 100%
TCP 连接
| 指标 | 数值 |
| ESTABLISHED 峰值 | ~300 → 逐步下降 |
| TIME_WAIT | ~0 |
| ActiveOpens 峰值 | ~3,907 |
| PassiveOpens | ~143 |
- 长连接特征:TIME_WAIT 接近 0,连接生命周期较长
- PassiveOpens ~143 反映节点间通信的被动连接
磁盘空间
| 分区 | 文件系统 | 挂载点 | 使用率 |
| /dev/vda1 | ext4 | / | 4.20% |
| /dev/vdb1d | xfs | /data | 8.44% |
分片服务器资源总结
- 磁盘 IO 是主要瓶颈 — 写 IOPS ~300 k/s,CPU disk IO 占比接近 100%
- CPU 调度过载 — System Load ~70 / 32 核 = 2.2 倍,iowait 偏高
- 内存 30%~50%,余量充足
- 网络 上传 ~341 KB/s(节点间同步),未达瓶颈
- TCP 长连接,健康无堆积
资源对比
| 指标 | 压力服务器 | 分片服务器 |
| CPU 聚合峰值 | ~90% | ~60% |
| System Load 峰值 | ~30 | ~70 |
| 内存峰值 | ~80% | ~40% |
| 网络上传峰值 | ~10.7 KB/s | ~341 KB/s |
| 磁盘写 IOPS 峰值 | ~100 k/s | ~300 k/s |
| CPU disk IO 峰值 | ~80% | ~100% |
| TCP ESTABLISHED 峰值 | ~800 | ~300 |
| 连接特征 | 短连接(高 TIME_WAIT) | 长连接(零 TIME_WAIT) |
| 主要瓶颈 | CPU 使用率 | 磁盘 IO + CPU Load |
改进建议
| 优先级 | 改进方向 | 具体措施 |
| P0 | 优化分片服务器磁盘 IO | 升级 SSD 或优化 WAL/批量写入策略,写 IOPS 300 k/s + disk IO 100% 是首要瓶颈 |
| P0 | 排查分片异常掉线 | 定位 2 个分片掉线的根因,检查资源竞争及跨分片交易路由分布 |
| P1 | 降低分片服务器 CPU Load | System Load 70/32 核,排查线程/协程数量或 IO 阻塞导致的调度排队 |
| P1 | 分析失败交易 | 对 171,345 笔失败请求分类(超时/拒绝/其他),定位根因 |
| P2 | 优化交易池管理 | 峰值 50 万积压,评估是否需调整 max_txpool_size 或限流策略 |
| P3 | 评估压力服务器 CPU 上限 | CPU 90% 可能限制发压能力,必要时增加压力机或优化压测客户端 |