一个专业的多区块链节点性能基准测试框架,具备全面的 QPS 测试、实时监控、智能瓶颈检测和高级可视化报告功能。
- 多模式 QPS 测试:快速(15+分钟)、标准(90+分钟)和密集(8+小时)测试模式
- 跨平台兼容性:支持 8 个主流区块链节点(Solana、Ethereum、BSC、Base、Polygon、Scroll、Starknet、Sui)在 AWS、其他云、IDC 或本地 Linux 环境运行
- 真实交易数据测试:从区块链节点获取活跃账户地址,使用 single 或 mixed RPC 方法生成测试目标
- 多层次性能监控:专业监控系统,4 个专业化数据流
- 统一指标(79 个字段):CPU、内存、EBS、网络、ENA、区块高度、QPS
- 监控开销跟踪(20 个字段):自我监控和影响分析
- ENA 深度监控(15 个字段):AWS 专属网络性能分析
- 区块链健康跟踪(7 个字段):节点同步状态和数据丢失检测
- 双重瓶颈监测机制:
- 即时监测:8 维度监控,5 种场景判断逻辑避免误判
- 资源瓶颈 + 节点健康 → 误报(重置计数器)
- RPC 性能违规(成功率 < 95% 或 延迟 > 1000ms)→ 真实瓶颈(必要条件)
- 任意瓶颈 + 节点不健康 → 真实瓶颈(连续 3 次)
- 仅节点持续不健康 → 节点故障(立即停止)
- 全部正常 → 继续测试
- 离线分析:测试完成后的多维度深度分析
- 时间窗口分析(瓶颈前后 ±30 秒)聚焦根因调查
- 性能悬崖分析识别 QPS 降级模式
- EBS 性能深度剖析与 AWS 基线对比
- CPU-EBS 关联分析识别资源瓶颈
- RPC 方法性能剖析和优化建议
- 即时监测:8 维度监控,5 种场景判断逻辑避免误判
- AWS 深度集成:EBS 性能基线、ENA 网络监控
- 专业可视化:32 张专业图表和全面的 HTML 报告
在运行框架之前,您必须配置以下参数:
# 1. RPC 端点(必需)
LOCAL_RPC_URL="http://localhost:8899" # 您的区块链节点 RPC 端点
# 2. 区块链类型(必需)
BLOCKCHAIN_NODE="Solana" # 支持:Solana、Ethereum、BSC、Base、Polygon、Scroll、Starknet、Sui
# 3. 区块链进程名称(监控必需)
BLOCKCHAIN_PROCESS_NAMES=(
"agave-validator" # 您实际的区块链节点进程名称
"solana-validator" # 添加所有可能的进程名称
"validator"
)
# 使用以下命令检查您的进程名称:ps aux | grep -i validator# 4. DATA 设备配置(必需)
LEDGER_DEVICE="nvme1n1" # DATA 设备名称(使用 'lsblk' 检查)
DATA_VOL_TYPE="io2" # 选项:"gp3" | "io2" | "instance-store"
DATA_VOL_MAX_IOPS="30000" # 您的 EBS 卷预配置的 IOPS
DATA_VOL_MAX_THROUGHPUT="700" # 您的 EBS 卷吞吐量(MiB/s)
# 5. ACCOUNTS 设备(可选,但建议配置以进行完整监控)
ACCOUNTS_DEVICE="nvme2n1" # ACCOUNTS 设备名称
ACCOUNTS_VOL_TYPE="io2" # 选项:"gp3" | "io2" | "instance-store"
ACCOUNTS_VOL_MAX_IOPS="30000" # ACCOUNTS 卷的 IOPS
ACCOUNTS_VOL_MAX_THROUGHPUT="700" # ACCOUNTS 卷的吞吐量(MiB/s)
# 6. 网络配置(AWS 环境必需)
NETWORK_MAX_BANDWIDTH_GBPS=25 # 您的实例网络带宽(Gbps)快速配置检查:
# 验证您的区块链进程名称
ps aux | grep -i validator
ps aux | grep -i agave
# 验证您的 EBS 设备
lsblk
# 在 AWS 控制台检查您的 EBS 卷配置:
# EC2 → 卷 → 选择您的卷 → 详细信息选项卡
# - IOPS:预配置的 IOPS 值
# - 吞吐量:预配置的吞吐量值
# 检查您的实例网络带宽:
# EC2 → 实例类型 → 搜索您的实例类型 → 网络配置文件位置:
config/config_loader.sh- RPC 端点、区块链类型、进程名称config/user_config.sh- EBS 设备、网络带宽、监控间隔
注意:如果您没有正确配置这些参数,框架将使用默认值,这可能与您的实际硬件不匹配,导致性能分析不准确。
最快的方式是使用项目自带的依赖安装脚本:
# 交互式安装(每个需要 sudo 的步骤会先询问)
bash scripts/install_deps.sh
# 非交互式(CI / Docker / 无人值守 VM)
bash scripts/install_deps.sh --yes
# 仅检查模式 — 只列出缺什么,不做任何修改
bash scripts/install_deps.sh --check
# 查看所有参数
bash scripts/install_deps.sh --help安装器涵盖:
- 系统包(
sysstat bc jq net-tools procps)— 自动检测 apt/yum/dnf/apk - Python 包(来自
requirements.txt)— 自动处理 PEP 668(Debian 12+) - vegeta v12.12.0 — 锁定版本,SHA256 校验,安装到
~/bin/vegeta
支持的发行版:Ubuntu、Debian、RHEL、CentOS、Rocky、AlmaLinux、Amazon Linux、Fedora、Alpine。
手动安装(如果您希望逐步控制)
# 安装 Vegeta v12.12.0(QPS 测试工具)
wget https://github.com/tsenart/vegeta/releases/download/v12.12.0/vegeta_12.12.0_linux_amd64.tar.gz
tar -xzf vegeta_12.12.0_linux_amd64.tar.gz
sudo mv vegeta /usr/local/bin/
vegeta -version # 验证安装
# 安装系统监控工具(框架硬依赖 — 全部必需)
sudo apt-get install -y sysstat bc jq net-tools procps
# sysstat → iostat/mpstat/sar | bc → shell 脚本中的算术运算
# jq → JSON 解析 | net-tools → netstat | procps → ps/top
# 安装 Python 和虚拟环境支持
sudo apt-get install python3 python3-venv
# 创建虚拟环境
python3 -m venv node-env
# 激活虚拟环境
source node-env/bin/activate
# 检查 Python 版本(需要 Python 3.8+)
python3 --version
# 安装 Python 依赖(从项目根目录执行)
pip3 install -r requirements.txt
# 注意:在 Debian 12+(PEP 668)上,如果您跳过了上面的 venv,请使用:
# pip3 install --user --break-system-packages -r requirements.txt
# 验证所有工具已安装
which vegeta # QPS 测试工具
which iostat # I/O 监控工具
which mpstat # CPU 监控工具
which sar # 网络监控工具# 快速测试(15+ 分钟)- 可以直接运行
./blockchain_node_benchmark.sh --quick
# 标准测试(90+ 分钟)- 建议使用 screen
screen -S benchmark_$(date +%m%d_%H%M)
./blockchain_node_benchmark.sh --standard
# ⚠️ 关闭 SSH 前必须按 Ctrl+a 然后 d 分离会话!
# 密集测试(最多 8 小时)- 必须使用 screen/tmux
screen -S benchmark_$(date +%m%d_%H%M)
./blockchain_node_benchmark.sh --intensive
# ⚠️ 关闭 SSH 前必须按 Ctrl+a 然后 d 分离会话!- 使用
screen或tmux - 分离会话(screen 按 Ctrl+a, 然后 d)后再关闭 SSH
- 否则 SSH 断开时测试会停止!
详见下方长时间测试最佳实践。
# 自定义密集测试,指定参数
./blockchain_node_benchmark.sh --intensive \
--initial-qps 1000 \
--max-qps 10000 \
--step-qps 500 \
--duration 300 \
--mixed # 使用混合 RPC 方法测试blockchain-node-benchmark/
├── 🎯 核心执行层
│ ├── blockchain_node_benchmark.sh # 主入口脚本
│ ├── master_qps_executor.sh # QPS 测试引擎
│ └── common_functions.sh # 共享函数库
├── ⚙️ 配置管理
│ ├── config_loader.sh # 配置加载器
│ └── system_config.sh # 系统配置
├── 📊 监控数据层
│ ├── unified_monitor.sh # 统一监控器
│ ├── bottleneck_detector.sh # 瓶颈检测器
│ └── monitoring_coordinator.sh # 监控协调器
├── 🔬 分析处理层
│ ├── comprehensive_analysis.py # 综合分析器
│ ├── qps_analyzer.py # QPS 分析器
│ └── rpc_deep_analyzer.py # RPC 深度分析器
├── 📈 可视化层
│ ├── report_generator.py # HTML 报告生成器
│ ├── performance_visualizer.py # 性能可视化引擎
│ └── advanced_chart_generator.py # 高级图表生成器
└── 🛠️ 工具与实用程序
├── benchmark_archiver.sh # 测试结果归档器
├── ebs_bottleneck_detector.sh # EBS 瓶颈检测器
└── target_generator.sh # 测试目标生成器
docs/ 目录中提供了全面的文档:
- 4 层模块化架构设计
- 组件交互和数据流
- 32 张专业图表详解
- 系统集成点
- 完整的数据文件结构和字段定义
- 79 字段性能数据 CSV 格式
- 20 字段监控开销 CSV 格式
- 数据流架构和文件命名约定
- 测试结果的 JSON 格式规范
- 4 层配置系统(用户/系统/内部/动态)
- EBS 卷配置(gp3/io2/instance-store)
- 网络和 ENA 设置
- 区块链特定参数
- 双层监控架构
- 79 项性能指标收集(已更新)
- 自我监控和开销分析
- AWS 标准转换公式
- 单一 vs 混合 RPC 测试模式
- 多区块链支持(Solana/Ethereum/BSC/Base/Polygon/Scroll/Starknet/Sui)
- RPC 方法配置
- 真实交易数据测试
RPC 和区块链设置(config/config_loader.sh):
LOCAL_RPC_URL="http://localhost:8899"
BLOCKCHAIN_NODE="Solana"
BLOCKCHAIN_PROCESS_NAMES=(
"agave-validator"
"solana-validator"
"validator"
)EBS 设备配置(config/user_config.sh):
# DATA 设备(必需)
LEDGER_DEVICE="nvme1n1"
DATA_VOL_TYPE="io2" # io2/gp3/instance-store
DATA_VOL_MAX_IOPS="30000"
DATA_VOL_MAX_THROUGHPUT="700" # MiB/s
# ACCOUNTS 设备(可选)
ACCOUNTS_DEVICE="nvme2n1"
ACCOUNTS_VOL_TYPE="io2" # io2/gp3/instance-store
ACCOUNTS_VOL_MAX_IOPS="30000"
ACCOUNTS_VOL_MAX_THROUGHPUT="700" # MiB/s
# 网络配置
NETWORK_MAX_BANDWIDTH_GBPS=25 # Gbps注意: ACCOUNTS 设备是可选的。如果未配置,框架将仅监控 DATA 设备。
瓶颈检测阈值(config/internal_config.sh):
BOTTLENECK_CPU_THRESHOLD=85
BOTTLENECK_MEMORY_THRESHOLD=90
BOTTLENECK_EBS_UTIL_THRESHOLD=90
BOTTLENECK_EBS_LATENCY_THRESHOLD=50
NETWORK_UTILIZATION_THRESHOLD=80监控间隔(config/user_config.sh):
MONITOR_INTERVAL=5 # 默认监控间隔(秒)
HIGH_FREQ_INTERVAL=1 # 高频监控间隔
ULTRA_HIGH_FREQ_INTERVAL=0.5 # 超高频监控间隔| 模式 | 持续时间 | QPS 范围 | 步长 | 使用场景 |
|---|---|---|---|---|
| 快速 | 15+ 分钟 | 1000-3000 | 500 QPS | 基本性能验证 |
| 标准 | 90+ 分钟 | 20000-50000 | 500 QPS | 全面性能评估 |
| 密集 | 最多 8 小时 | 50000-无限制 | 250 QPS | 智能瓶颈检测 |
- 时间戳:统一时间戳(1 个字段)
- CPU:使用率、I/O 等待、系统调用(6 个字段)
- 内存:使用率、可用内存、缓存(3 个字段)
- EBS 存储:IOPS、吞吐量、延迟、利用率(每设备 21 个字段,2 个设备共 42 个字段)
- 网络:带宽利用率、PPS、连接数(10 个字段)
- ENA 网络:配额超限、带宽限制(6 个字段,仅 AWS)
- 监控开销:系统影响指标(2 个字段)
- 区块高度:本地 vs 主网同步状态(6 个字段)
- QPS 性能:当前 QPS、延迟、可用性(3 个字段)
总计:79 个字段(AWS 环境含 ENA)或 73 个字段(非 AWS 环境不含 ENA)
框架生成多个专业化 CSV 文件用于细粒度分析:
1. 性能指标 (performance_YYYYMMDD_HHMMSS.csv - 79 个字段)
- 统一的性能数据,整合所有系统指标
- 可配置间隔的实时采集(默认 5 秒)
- 用于综合性能分析和关联研究
2. 监控开销 (monitoring_overhead_YYYYMMDD_HHMMSS.csv - 20 个字段)
- 监控系统资源消耗(CPU、内存、进程数)
- 区块链节点资源消耗
- 系统级资源统计(核心数、内存、磁盘、缓存、缓冲区)
- 用于监控影响分析和开销优化
3. ENA 网络详情 (ena_network_YYYYMMDD_HHMMSS.csv - 15 个字段,仅 AWS)
- 网络接口统计(rx/tx 字节数、数据包数)
- ENA 配额跟踪(带宽入/出、PPS、连接跟踪、本地链路)
- 网络限制状态(network_limited、pps_limited、bandwidth_limited)
- 用于 AWS ENA 特定瓶颈检测和网络性能分析
4. 区块高度监控 (block_height_monitor_YYYYMMDD_HHMMSS.csv - 7 个字段)
- 本地和主网区块高度跟踪
- 区块高度差异和同步状态
- 节点健康指标(local_health、mainnet_health)
- 数据丢失检测标志
- 用于区块链节点同步分析和健康监控
- CPU 瓶颈:阈值 85%
- 内存瓶颈:阈值 90%
- EBS 瓶颈:IOPS/吞吐量/利用率 > 90% 基线
- 网络瓶颈:带宽/PPS 利用率 > 80%
- ENA 瓶颈:配额限制超限
- RPC 成功率:< 95%(必要条件)
- RPC 延迟:P99 > 1000ms(必要条件)
- RPC 错误率:> 5%
查看基于真实测试数据生成的完整示例报告(标准模式,90+ 分钟):
高级分析图表(9 张):
pearson_correlation_analysis.png- Pearson 相关性分析linear_regression_analysis.png- 线性回归分析negative_correlation_analysis.png- 负相关性分析ena_limitation_trends.png- ENA 限制趋势ena_connection_capacity.png- ENA 连接容量ena_comprehensive_status.png- ENA 综合状态comprehensive_correlation_matrix.png- 综合相关性矩阵performance_trend_analysis.png- 性能趋势分析performance_correlation_heatmap.png- 性能相关性热图
EBS 专业图表(7 张):
ebs_aws_capacity_planning.png- AWS 容量规划分析ebs_iostat_performance.png- Iostat 性能分析ebs_bottleneck_correlation.png- 瓶颈相关性分析ebs_performance_overview.png- EBS 性能概览ebs_bottleneck_analysis.png- EBS 瓶颈分析ebs_aws_standard_comparison.png- EBS AWS 标准对比ebs_time_series_analysis.png- EBS 时间序列分析
核心性能图表(11 张):
performance_overview.png- 性能概览cpu_ebs_correlation_visualization.png- CPU-EBS 相关性分析device_performance_comparison.png- 设备性能对比await_threshold_analysis.png- I/O 延迟阈值分析monitoring_overhead_analysis.png- 监控开销分析qps_trend_analysis.png- QPS 趋势分析resource_efficiency_analysis.png- 资源效率分析bottleneck_identification.png- 瓶颈识别block_height_sync_chart.png- 区块高度同步图表smoothed_trend_analysis.png- 平滑趋势分析util_threshold_analysis.png- 利用率阈值分析
附加分析图表(5 张):
resource_distribution_chart.png- 资源分布图表monitoring_impact_chart.png- 监控影响分析comprehensive_analysis_charts.png- 综合分析图表performance_cliff_analysis.png- 性能悬崖分析qps_performance_analysis.png- QPS 性能分析
- 系统级瓶颈分析:瓶颈检测结果和优化建议
- 性能摘要:测试概览和关键性能指标
- 配置状态检查:系统配置验证
- 区块链节点同步分析:区块高度监控和同步状态
- EBS 性能分析结果:存储性能深度分析与 AWS 基线对比
- 性能图表库:所有 32 张专业可视化图表按类别组织
- 监控开销分析:监控系统影响的综合分析
- CPU-EBS 关联分析:资源关联和瓶颈识别
# 运行标准测试
./blockchain_node_benchmark.sh --standard
# 查看结果
ls reports/
# comprehensive_analysis_report.html
# performance_overview.png
# cpu_ebs_correlation_visualization.png
# ...(其他图表文件)# 自定义密集测试,指定参数
./blockchain_node_benchmark.sh --intensive \
--initial-qps 2000 \
--max-qps 15000 \
--step-qps 1000 \
--mixed # 使用混合 RPC 方法测试# 检查 QPS 测试引擎状态
./core/master_qps_executor.sh --status
# 检查监控系统状态
./monitoring/monitoring_coordinator.sh status
# 查看测试历史
./tools/benchmark_archiver.sh --list# 推荐:安装特定版本 v12.12.0
wget https://github.com/tsenart/vegeta/releases/download/v12.12.0/vegeta_12.12.0_linux_amd64.tar.gz
tar -xzf vegeta_12.12.0_linux_amd64.tar.gz
sudo mv vegeta /usr/local/bin/
vegeta -version # 应显示:Version: 12.12.0
# 备选:通过包管理器安装(可能是旧版本)
# Ubuntu/Debian
sudo apt-get install vegeta# 检查检测到的网络接口
echo $NETWORK_INTERFACE
# 列出所有网络接口
ip link show
# 如果自动检测失败,手动指定网络接口
export NETWORK_INTERFACE="eth0" # 替换为您的接口名称
# 或添加到 config/user_config.sh:
# NETWORK_INTERFACE="eth0"
# 常见接口名称:
# - AWS:eth0、eth1
# - 其他云:eth0、ens3、ens5
# - 本地:eth0、enp0s3、wlan0# 安装 sysstat 包
sudo apt-get install sysstat # Ubuntu/Debian
sudo yum install sysstat # CentOS/RHEL# 重新安装依赖
pip3 install --upgrade -r requirements.txt
# 检查特定包
python3 -c "import matplotlib, pandas, numpy; print('All packages OK')"# 授予执行权限
chmod +x blockchain_node_benchmark.sh
chmod +x core/master_qps_executor.sh
chmod +x monitoring/monitoring_coordinator.sh所有日志存储在 blockchain-node-benchmark-result/current/logs/ 目录下:
- QPS测试日志:
master_qps_executor.log- QPS测试进度和结果 - 监控日志:
unified_monitor.log- 系统监控数据 - 瓶颈检测:
bottleneck_detector.log- 瓶颈检测事件 - EBS分析:
ebs_bottleneck_detector.log- EBS性能分析 - 性能数据:
performance_YYYYMMDD_HHMMSS.csv- 原始性能指标(79 个字段) - 监控开销:
monitoring_overhead_YYYYMMDD_HHMMSS.csv- 监控系统开销(20 个字段) - ENA 网络:
ena_network_YYYYMMDD_HHMMSS.csv- ENA 网络详细指标(15 个字段,仅 AWS) - 区块高度监控:
block_height_monitor_YYYYMMDD_HHMMSS.csv- 区块高度同步跟踪(7 个字段)
如果终端在测试期间断开连接,可以重新连接并查看进度:
# 实时查看QPS测试进度
tail -f blockchain-node-benchmark-result/current/logs/master_qps_executor.log
# 检查当前测试状态
ps aux | grep vegeta | grep -v grep
# 查看最新性能数据
tail -20 blockchain-node-benchmark-result/current/logs/performance_latest.csv
# 检查是否检测到瓶颈
cat /dev/shm/blockchain-node-benchmark/bottleneck_status.json | jq '.'
# 查看已完成的测试结果
ls -lt blockchain-node-benchmark-result/current/vegeta_results/ | head -10测试完成后,所有结果都会被归档:
# 查看归档结果
ls -lt blockchain-node-benchmark-result/archives/
# 访问特定测试运行
cd blockchain-node-benchmark-result/archives/run_XXX_YYYYMMDD_HHMMSS/
# 查看日志
cat logs/master_qps_executor.log
# 查看报告
open reports/performance_report_zh_*.html# 步骤 1:创建带唯一名称的 screen 会话
screen -S benchmark_$(date +%m%d_%H%M)
# 示例:benchmark_1030_2200
# 步骤 2:启动测试
./blockchain_node_benchmark.sh --intensive
# 步骤 3:⚠️ 重要 - 关闭 SSH 前必须分离会话
# 按键:Ctrl+a,然后按 d
# 你会看到:[detached from xxx.benchmark_1030_2200]
# 步骤 4:现在可以安全关闭 SSH
exit
# 步骤 5:随时重新连接
# 列出所有 screen 会话
screen -ls
# 重新连接到特定会话
# 如果显示 "(Detached)" - 使用简单重连:
screen -r benchmark_1030_2200
# 或使用 PID:
screen -r 12345
# 如果显示 "(Attached)" - 使用强制重连:
screen -d -r 12345
# 这会断开现有连接并重新连接你常见问题:
# 问题:多个同名会话
screen -ls
# 显示:13813.benchmark, 19327.benchmark, 54872.benchmark
# 解决方案 1:使用 PID 连接到最新的会话
screen -r 13813
# 解决方案 2:清理旧会话
screen -X -S 19327 quit
screen -X -S 54872 quit
# 解决方案 3:杀掉所有会话重新开始
killall screen为什么分离很关键:如果不分离就关闭 SSH,测试会停止!
# 步骤 1:创建 tmux 会话
tmux new -s benchmark
# 步骤 2:启动测试
./blockchain_node_benchmark.sh --intensive
# 步骤 3:⚠️ 重要 - 关闭 SSH 前必须分离会话
# 按键:Ctrl+b,然后按 d
# 步骤 4:随时重新连接
tmux attach -t benchmarknohup ./blockchain_node_benchmark.sh --intensive > test.log 2>&1 &
# 查看进度:tail -f test.log
# 列出历史测试
./tools/benchmark_archiver.sh --list
# 比较测试结果
./tools/benchmark_archiver.sh --compare run_001 run_002
# 清理旧测试
./tools/benchmark_archiver.sh --cleanup --days 30# 使用 Python 分析组件
from analysis.comprehensive_analysis import ComprehensiveAnalyzer
analyzer = ComprehensiveAnalyzer("reports")
analyzer.run_comprehensive_analysis("logs/performance_latest.csv")# 运行多个测试模式
for mode in quick standard intensive; do
echo "Running $mode test..."
./blockchain_node_benchmark.sh --$mode
sleep 60 # 等待系统恢复
done我们欢迎贡献!贡献本项目即表示您同意以下条款:
提交 Pull Request 即表示您同意:
- 您的贡献将同时在 AGPL 3.0 和商业许可证下授权
- 您授予项目维护者在商业版本中使用您贡献的权利
- 您有权提交这些贡献(无第三方知识产权冲突)
# 克隆仓库
git clone <repository-url>
cd blockchain-node-benchmark
# 安装开发依赖
pip3 install -r requirements.txt
# 验证安装
python3 --version
bash --version- Fork 和分支:从
main创建功能分支 - 代码风格:Python 遵循 PEP 8,bash 脚本使用 shellcheck
- 文档:更新相关文档
- 提交信息:使用清晰、描述性的提交信息
- Pull Request:提交 PR 并附上详细说明
- 在
monitoring/unified_monitor.sh中添加数据收集逻辑 - 更新
generate_csv_header()函数以添加新字段 - 在 Python 分析脚本中添加相应的分析逻辑
- 更新可视化组件以生成相关图表
对于任何贡献相关的问题,请提交带有 question 标签的 Issue。
本项目采用双许可证模式:
- 个人、学术和开源项目免费使用
- 修改后必须开源
- 网络使用需要公开源码
- 详见 LICENSE 文件
- 商业/专有用途需要购买
- 允许闭源集成
- 无 AGPL 义务
- 提供企业支持
- 详见 LICENSE.COMMERCIAL 文件
联系方式: 在 GitHub 提交 Issue 并添加 commercial-license 标签咨询商业许可