|
| 1 | +--- |
| 2 | +date: 2026-03-10 |
| 3 | +draft: true |
| 4 | +authors: |
| 5 | + - cloaks |
| 6 | +categories: |
| 7 | + - DevOps |
| 8 | +tags: |
| 9 | + - ChainMaker |
| 10 | + - 性能测试 |
| 11 | + - 分片 |
| 12 | + - 跨分片 |
| 13 | +comments: true |
| 14 | +description: 长安链 5% 跨分片转账性能压测结果分析,覆盖 TPS、成功率、区块链监控数据及瓶颈定位,与 0%/1% 基线对比评估跨分片开销的线性变化趋势。 |
| 15 | +--- |
| 16 | + |
| 17 | +# 长安链 5% 跨分片转账压测报告 |
| 18 | + |
| 19 | +本文记录长安链在 5% 跨分片比例下的转账性能压测结果,与 0%/1% 基线对比评估跨分片开销的线性变化趋势。 |
| 20 | + |
| 21 | +<!-- more --> |
| 22 | + |
| 23 | +## 测试概要 |
| 24 | + |
| 25 | +| 项目 | 内容 | |
| 26 | +|------|------| |
| 27 | +| 测试项目 | 5% 跨分片比例转账压测 | |
| 28 | +| 测试目的 | 验证中等跨分片比例下的性能表现,与 0%/1% 基线对比评估跨分片开销的线性变化趋势 | |
| 29 | +| 测试步骤 | 使用 100 个 sfc 压力进程向 150 分片发送数据,持续 10 分钟 | |
| 30 | +| 测试时间 | 2026-03-10 14:45:02 — 2026-03-10 15:21:35(发送 10m + 尾部处理 4m48s) | |
| 31 | +| 压力服务器 | 10.15.21.57(32 核) | |
| 32 | +| 分片服务器 | 10.15.21.154(32 核) | |
| 33 | + |
| 34 | +!!! note "关于分片与链的关系" |
| 35 | + |
| 36 | + 本次测试部署 150 个分片,每个分片即为一条独立的链。区块链监控以链为维度采集数据,因此后文的分片性能详情以 chain 为单位呈现。 |
| 37 | + |
| 38 | +## 预期结果 |
| 39 | + |
| 40 | +| 指标 | 预期值 | |
| 41 | +|------|--------| |
| 42 | +| 单分片 TPS | ~10,000 | |
| 43 | +| 成功率 | ≥ 99.9% | |
| 44 | +| 性能衰减(vs 0% 基线) | ≤ 10% | |
| 45 | +| 尾部延迟 | 无明显积压 | |
| 46 | +| 资源占用 | CPU/内存/网络/IO 合理范围,无异常飙升 | |
| 47 | +| 区块打包 | 正常,无异常数据或空块 | |
| 48 | + |
| 49 | +## 测试结论 |
| 50 | + |
| 51 | +!!! success "符合预期:整体满足百万 TPS 要求" |
| 52 | + |
| 53 | + 测试结果达到百万 TPS 性能目标,成功率 100.00%(零失败分片),相较 1% 测试中 2 个分片掉线的问题有明显改善。但尾部延迟从 3m24s 增加到 4m48s,交易池积压消化时间更长,反映出跨分片比例提升后后端处理压力增大。 |
| 54 | + |
| 55 | +### 关键指标对比 |
| 56 | + |
| 57 | +| 指标 | 0% 基线 | 1% 跨分片 | 5% 跨分片 | 变化(5% vs 1%) | 是否达标 | |
| 58 | +|------|---------|----------|----------|-----------------|----------| |
| 59 | +| 单分片 TPS | ~7,000 | ~7,054 | ~6,727 | **-4.6%** | ✅ | |
| 60 | +| 成功率 | ≥ 99.9% | 98.67% | **100.00%** | **+1.33pp**,零掉线 | ✅ | |
| 61 | +| 尾部延迟 | 无明显积压 | +3m 24s | **+4m 48s** | +1m 24s | ✅ | |
| 62 | +| 校准 TPS(聚合) | ~1,100,000 | ~1,056,989 | **~1,009,110** | **-4.5%** | ✅ | |
| 63 | +| 交易池峰值积压 | — | ~500,000 笔 | ~5,000 笔 | 大幅降低 | ✅ | |
| 64 | + |
| 65 | +!!! tip "趋势分析" |
| 66 | + |
| 67 | + 从 0% → 1% → 5%,校准 TPS 呈线性下降趋势(1,100,000 → 1,056,989 → 1,009,110),每增加 1% 跨分片比例约衰减 ~1%。按此趋势外推,10% 跨分片预计校准 TPS ~960,000,仍可维持在百万量级附近。 |
| 68 | + |
| 69 | +### 瓶颈链路 |
| 70 | + |
| 71 | +``` |
| 72 | +压力客户端 CPU 饱和(95%)→ 发压速率受限 |
| 73 | + ↓ |
| 74 | + 分片服务器磁盘 IO 竞争 → 区块提交延迟 |
| 75 | + ↓ |
| 76 | + 尾部消化 4m48s(较 1% 增加 1m24s) |
| 77 | +``` |
| 78 | + |
| 79 | +### 问题分析 |
| 80 | + |
| 81 | +1. **尾部延迟增加** — 发送 TPS(16,980)与实际 TPS(11,469)差距拉大(vs 1% 的 21,417/15,984),跨分片交易需要额外的分片间通信开销,导致后端处理速率进一步下降 |
| 82 | +2. **压力服务器 CPU 饱和** — 峰值 ~95%,高于 1% 测试的 ~90%,跨分片交易构造和路由比纯片内交易消耗更多 CPU |
| 83 | +3. **发送 TPS 下降** — 16,980 vs 1% 的 21,417,降幅 20.7%,压力客户端 CPU 成为发压瓶颈 |
| 84 | +4. **分片服务器磁盘 IO 持续偏高** — 跨分片交易产生额外的日志和状态写入 |
| 85 | + |
| 86 | +## 压测数据 |
| 87 | + |
| 88 | +| 指标 | 数值 | |
| 89 | +|------|------| |
| 90 | +| 总请求数 | 10,188,396 | |
| 91 | +| 成功请求 | 10,188,240 | |
| 92 | +| 失败请求 | 156 | |
| 93 | +| 成功率 | 100.00% | |
| 94 | +| 发送耗时 | 10m 0.03s | |
| 95 | +| 总耗时 | 14m 48.32s | |
| 96 | +| 发送 TPS | 16,979.81(总请求 / 发送耗时) | |
| 97 | +| 实际 TPS | 11,469.33(成功请求 / 总耗时) | |
| 98 | +| 校准 TPS | 1,009,109.53 | |
| 99 | + |
| 100 | +!!! info "指标说明" |
| 101 | + |
| 102 | + - **发送 TPS** = 总请求数 / 发送耗时,衡量压力客户端的发压速率 |
| 103 | + - **实际 TPS** = 成功请求 / 总耗时,衡量端到端吞吐能力(含尾部消化时间) |
| 104 | + - **校准 TPS** = 所有分片的聚合 TPS,用于计算单分片 TPS(校准 TPS / 150 ≈ 6,727) |
| 105 | + |
| 106 | +## 区块链监控分析 |
| 107 | + |
| 108 | +### 交易池 |
| 109 | + |
| 110 | +| 指标 | 数值 | |
| 111 | +|------|------| |
| 112 | +| 峰值积压 | ~5,000 笔 | |
| 113 | +| 达峰时间 | ~14:50 | |
| 114 | +| 清空时间 | ~15:10 | |
| 115 | +| 尾部消化耗时 | ~20 分钟(14:50 → 15:10) | |
| 116 | + |
| 117 | +- 交易池在 14:45 开始增长,~14:50 达到 ~5,000 笔峰值 |
| 118 | +- 峰值后缓慢下降,~15:10 基本清空 |
| 119 | +- 相较 1% 测试峰值 50 万笔大幅降低,交易流转更加平稳 |
| 120 | + |
| 121 | +### 区块数据 |
| 122 | + |
| 123 | +- 各分片累计交易量增长曲线基本一致,分片负载较均衡 |
| 124 | +- 区块高度从约 200 增至 ~3,000+,各分片间差异不大,共识过程基本正常 |
| 125 | +- 交易数累计达 ~1.75M per shard |
| 126 | + |
| 127 | +### 各节点性能详情 |
| 128 | + |
| 129 | +| 指标 | 节点 1 | 节点 2 | 节点 3 | 节点 4 | |
| 130 | +|------|--------|--------|--------|--------| |
| 131 | +| 区块打包耗时 | 正常(0.0s) | 正常(0.0s) | 正常(0.0s) | 正常(0.0s) | |
| 132 | +| 区块提交耗时 | 正常(0.0s) | 正常(0.0s) | 正常(0.0s) | 正常(0.0s) | |
| 133 | +| 区块验证耗时 | 正常(0.0s) | 正常(0.0s) | 正常(0.0s) | 正常(0.0s) | |
| 134 | +| TPS 范围 | 4,000~8,000 | 4,000~8,000 | 4,000~8,000 | 4,000~8,000 | |
| 135 | + |
| 136 | +| 指标 | 节点 1 | 节点 2 | 节点 3 | 节点 4 | |
| 137 | +|------|--------|--------|--------|--------| |
| 138 | +| 打包异常次数 | **902** | **297** | **146** | **97** | |
| 139 | +| 提交异常次数 | **176** | **1,078** | 0 | 0 | |
| 140 | +| 验证异常次数 | **2,763** | **606** | **719** | **491** | |
| 141 | +| 同步异常次数 | **824** | **2,981** | 0 | 0 | |
| 142 | +| 区块延迟时间 | **4,742** | **524** | **124** | **1,418** | |
| 143 | +| 区块验证时间 | **2,491** | **1,244** | **151** | 0 | |
| 144 | +| 区块同步时间 | **3,706** | **3,603** | **815** | **432** | |
| 145 | + |
| 146 | +!!! warning "异常分析" |
| 147 | + |
| 148 | + 与 1% 测试异常集中在单节点不同,5% 测试中异常分布更加分散。节点 1 验证异常最高(2,763 次),节点 2 同步异常最高(2,981 次)。这表明跨分片比例提升后,各节点的负载更加均匀但整体异常面更广。 |
| 149 | + |
| 150 | +### TPS 曲线 |
| 151 | + |
| 152 | +- 各分片 TPS 在 14:45~14:55 期间波动在 4,000~8,000 |
| 153 | +- 14:55 后 TPS 逐步下降(发送结束,进入尾部消化) |
| 154 | +- 峰值 TPS 较 1% 测试(5,000~15,000)有所收窄,波动更平稳 |
| 155 | + |
| 156 | +## 资源监控 |
| 157 | + |
| 158 | +### 分片服务器(10.15.21.154) |
| 159 | + |
| 160 | +#### CPU |
| 161 | + |
| 162 | +| 指标 | 数值 | |
| 163 | +|------|------| |
| 164 | +| 核心数 | 32 | |
| 165 | +| 聚合使用率峰值 | ~60%(14:45~14:55) | |
| 166 | +| 各节点 CPU 峰值 | ~80%(部分核心触顶) | |
| 167 | +| System Load 峰值 | ~2.94 | |
| 168 | +| CPU iowait | 压测期间偏高(峰值 ~10%) | |
| 169 | + |
| 170 | +- 聚合 CPU ~60%,与 1% 测试持平 |
| 171 | +- System Load ~2.94,远低于 1% 测试的 ~70,说明 CPU 调度压力大幅改善 |
| 172 | +- CPU iowait 仍偏高,磁盘 IO 竞争仍然存在 |
| 173 | + |
| 174 | +#### 内存 |
| 175 | + |
| 176 | +| 指标 | 数值 | |
| 177 | +|------|------| |
| 178 | +| 聚合使用率 | ~30%~50% | |
| 179 | +| 各节点峰值 | ~50% | |
| 180 | +| 是否 OOM | 否 | |
| 181 | + |
| 182 | +- 内存压力较轻,与 1% 测试基本持平 |
| 183 | + |
| 184 | +#### 网络 |
| 185 | + |
| 186 | +| 指标 | 数值 | |
| 187 | +|------|------| |
| 188 | +| 下载速率峰值 | ~4 KB/s | |
| 189 | +| 上传速率峰值 | ~875 KB/s | |
| 190 | + |
| 191 | +- 上传流量较 1% 测试(~341 KB/s)增长 ~156%,跨分片交易需要更多的分片间通信 |
| 192 | +- 带宽仍在可控范围 |
| 193 | + |
| 194 | +#### 磁盘 |
| 195 | + |
| 196 | +| 指标 | 数值 | |
| 197 | +|------|------| |
| 198 | +| IOPS(读) | 聚合低位,偶发尖峰 | |
| 199 | +| IOPS(写) | 各节点峰值 ~300 k/s | |
| 200 | +| CPU disk IO 占比 | 峰值偶发飙升 | |
| 201 | + |
| 202 | +- 写 IOPS 与 1% 测试持平(~300 k/s),磁盘 IO 仍是分片服务器的核心瓶颈 |
| 203 | +- 跨分片交易增加了额外写入,但峰值未进一步恶化 |
| 204 | + |
| 205 | +#### TCP 连接 |
| 206 | + |
| 207 | +| 指标 | 数值 | |
| 208 | +|------|------| |
| 209 | +| ESTABLISHED 峰值 | ~300 → 压测后逐步下降 | |
| 210 | +| TIME_WAIT | ~0 | |
| 211 | +| ActiveOpens 峰值 | ~3,907 | |
| 212 | +| PassiveOpens | ~143 | |
| 213 | + |
| 214 | +- 长连接特征:与 1% 测试一致,TIME_WAIT 接近 0 |
| 215 | + |
| 216 | +#### 磁盘空间 |
| 217 | + |
| 218 | +| 分区 | 文件系统 | 挂载点 | 使用率 | |
| 219 | +|------|----------|--------|--------| |
| 220 | +| /dev/vda1 | ext4 | / | **4.22%** | |
| 221 | +| /dev/vdb1d | xfs | /data | **9.28%** | |
| 222 | + |
| 223 | +!!! note "分片服务器资源总结" |
| 224 | + |
| 225 | + - **磁盘 IO 仍是主要瓶颈** — 写 IOPS ~300 k/s,与 1% 持平 |
| 226 | + - **CPU 调度明显改善** — System Load ~2.94(vs 1% 的 ~70),过载问题消失 |
| 227 | + - **内存** 30%~50%,余量充足 |
| 228 | + - **网络** 上传 ~875 KB/s(vs 1% 的 ~341 KB/s),跨分片通信增量显著但未达瓶颈 |
| 229 | + - **TCP** 长连接,健康无堆积 |
| 230 | + |
| 231 | +### 压力服务器(10.15.21.57) |
| 232 | + |
| 233 | +#### CPU |
| 234 | + |
| 235 | +| 指标 | 数值 | |
| 236 | +|------|------| |
| 237 | +| 核心数 | 32 | |
| 238 | +| 聚合使用率峰值 | ~95%(14:40~14:55) | |
| 239 | +| 各节点 CPU 峰值 | ~90%(多个实例同时触顶) | |
| 240 | +| System Load 峰值 | ~30+ | |
| 241 | +| CPU iowait | 持续低位 | |
| 242 | + |
| 243 | +- 压测期间 CPU 从低位快速攀升至 ~95%,较 1% 测试(~90%)进一步恶化 |
| 244 | +- 跨分片交易构造(路由计算、地址解析)消耗更多 CPU |
| 245 | + |
| 246 | +#### 内存 |
| 247 | + |
| 248 | +| 指标 | 数值 | |
| 249 | +|------|------| |
| 250 | +| 聚合使用率 | ~60%~70% | |
| 251 | +| 各节点峰值 | ~70% | |
| 252 | +| 是否 OOM | 否 | |
| 253 | + |
| 254 | +- 内存使用与 1% 测试基本持平 |
| 255 | + |
| 256 | +#### 网络 |
| 257 | + |
| 258 | +| 指标 | 数值 | |
| 259 | +|------|------| |
| 260 | +| 下载速率峰值 | ~3 KB/s | |
| 261 | +| 上传速率峰值 | ~10 KB/s | |
| 262 | + |
| 263 | +- 网络流量极低,带宽未成为瓶颈 |
| 264 | + |
| 265 | +#### 磁盘 |
| 266 | + |
| 267 | +| 指标 | 数值 | |
| 268 | +|------|------| |
| 269 | +| IOPS(读) | 峰值 ~20 k/s | |
| 270 | +| IOPS(写) | 峰值 ~80 k/s | |
| 271 | +| CPU disk IO 占比 | 稳态低位 | |
| 272 | + |
| 273 | +- 磁盘 IO 整体可控 |
| 274 | + |
| 275 | +#### TCP 连接 |
| 276 | + |
| 277 | +| 指标 | 数值 | |
| 278 | +|------|------| |
| 279 | +| ESTABLISHED 峰值 | ~900 | |
| 280 | +| TIME_WAIT 峰值 | ~985 | |
| 281 | +| ActiveOpens 峰值 | ~4,087 | |
| 282 | +| PassiveOpens | ~0 | |
| 283 | + |
| 284 | +- 短连接特征:与 1% 测试一致 |
| 285 | + |
| 286 | +#### 磁盘空间 |
| 287 | + |
| 288 | +| 分区 | 文件系统 | 挂载点 | 使用率 | |
| 289 | +|------|----------|--------|--------| |
| 290 | +| /dev/vda1 | ext4 | / | **3.22%** | |
| 291 | +| /dev/vdb1d | xfs | /data | **20.93%** | |
| 292 | + |
| 293 | +!!! note "压力服务器资源总结" |
| 294 | + |
| 295 | + - **CPU 是主要瓶颈** — 峰值 ~95%(vs 1% 的 ~90%),跨分片交易构造开销更大 |
| 296 | + - **内存** 60%~70%,尚有余量 |
| 297 | + - **网络** 带宽消耗极低 |
| 298 | + - **磁盘 IO** 整体可控 |
| 299 | + - **TCP** 短连接模式,ESTABLISHED ~900 |
| 300 | + |
| 301 | +### 资源对比 |
| 302 | + |
| 303 | +| 指标 | 压力服务器 | 分片服务器 | |
| 304 | +|------|-----------|-----------| |
| 305 | +| CPU 聚合峰值 | ~95% | ~60% | |
| 306 | +| System Load 峰值 | ~30 | ~2.94 | |
| 307 | +| 内存峰值 | ~70% | ~50% | |
| 308 | +| 网络上传峰值 | ~10 KB/s | ~875 KB/s | |
| 309 | +| 磁盘写 IOPS 峰值 | ~80 k/s | ~300 k/s | |
| 310 | +| CPU disk IO 峰值 | 低位 | 偶发飙升 | |
| 311 | +| TCP ESTABLISHED 峰值 | ~900 | ~300 | |
| 312 | +| 连接特征 | 短连接(高 TIME_WAIT) | 长连接(零 TIME_WAIT) | |
| 313 | +| **主要瓶颈** | **CPU 使用率(95%)** | **磁盘 IO** | |
| 314 | + |
| 315 | +## 跨分片比例趋势分析 |
| 316 | + |
| 317 | +| 指标 | 0% 基线 | 1% 跨分片 | 5% 跨分片 | 趋势 | |
| 318 | +|------|---------|----------|----------|------| |
| 319 | +| 校准 TPS | ~1,100,000 | ~1,056,989 | ~1,009,110 | 每 +1% 跨分片 ≈ -1% TPS | |
| 320 | +| 单分片 TPS | ~7,000 | ~7,054 | ~6,727 | 缓慢下降 | |
| 321 | +| 成功率 | ≥ 99.9% | 98.67% | 100.00% | 5% 反而改善(无掉线) | |
| 322 | +| 尾部延迟 | 无 | +3m 24s | +4m 48s | 线性增长 | |
| 323 | +| 发送 TPS | — | 21,417 | 16,980 | 下降 20.7%(CPU 受限) | |
| 324 | +| 网络上传(分片) | — | ~341 KB/s | ~875 KB/s | 增长 156%(跨分片通信) | |
| 325 | + |
| 326 | +## 改进建议 |
| 327 | + |
| 328 | +| 优先级 | 改进方向 | 具体措施 | |
| 329 | +|--------|---------|---------| |
| 330 | +| P0 | 优化分片服务器磁盘 IO | 写 IOPS ~300 k/s 持续为首要瓶颈,升级 SSD 或优化 WAL/批量写入策略 | |
| 331 | +| P1 | 降低压力客户端 CPU 消耗 | CPU 95% 已接近极限,跨分片交易路由计算开销大,优化客户端或增加压力机 | |
| 332 | +| P1 | 排查区块异常 | 各节点打包/验证/同步异常分散分布,需排查跨分片交易处理流程中的异常源 | |
| 333 | +| P2 | 优化尾部延迟 | 4m48s 尾部消化时间较长,评估是否可优化交易池消费速率或缩短发送时长 | |
| 334 | +| P2 | 监控跨分片网络开销 | 上传流量增长 156%,随跨分片比例进一步提升需关注网络是否成为新瓶颈 | |
| 335 | +| P3 | 继续提升跨分片比例测试 | 建议进行 10%/20% 跨分片压测,验证性能衰减曲线和瓶颈拐点 | |
0 commit comments