如何对Hedera本地私有网络进行压力测试以获取TPS指标?
Hedera私有本地网络TPS压力测试方案
针对你部署的私有Hedera本地网络,以下是几种可靠的TPS性能测试工具和实操方法:
官方性能测试套件(Hedera Performance Test Suite)
这是Hedera官方推出的专用测试工具,完全适配私有网络环境,能精准统计TPS、延迟等核心指标。
- 操作步骤:
- 克隆项目到本地:
git clone https://github.com/hashgraph/hedera-performance-test-suite.git - 进入项目目录,编辑
application.properties,将hedera.node.address替换为你本地节点的IP和端口(如127.0.0.1:50211),同时配置本地网络初始化时生成的测试账户ID和私钥。 - 启动测试:执行
./gradlew run --args="--tps-target 1000 --duration 60",其中--tps-target是预期的TPS目标值,--duration为测试持续时长(单位:秒)。 - 查看结果:测试结束后,
results目录会生成包含实际TPS、交易成功率、延迟分布的详细报告。
- 克隆项目到本地:
社区轻量TPS生成工具
社区维护的开源工具,配置简单,适合快速验证私有网络的TPS上限:
- 操作步骤:
- 找到社区开源的Hedera TPS Generator仓库并克隆到本地。
- 修改
config.json配置文件,填入本地节点地址、测试账户的私钥,指定要测试的交易类型(如CryptoTransfer转账交易)。 - 启动测试:如果是Node.js实现的工具,执行
npm start -- --concurrency 50 --time 30,--concurrency为并发线程数,--time为测试时长。 - 实时查看控制台输出的TPS统计,测试完成后会生成汇总结果。
自定义SDK脚本测试
如果需要针对特定业务场景做压力测试,可以用Hedera官方SDK编写自定义测试脚本,以Java SDK为例:
- 核心实现示例:
import com.hedera.hashgraph.sdk.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class TpsTest { public static void main(String[] args) throws Exception { Client client = Client.forNetwork("{\"127.0.0.1:50211\": 0}") .setOperator(AccountId.fromString("YOUR_OPERATOR_ID"), PrivateKey.fromString("YOUR_OPERATOR_PRIVATE_KEY")); ExecutorService executor = Executors.newFixedThreadPool(100); AtomicInteger completedTx = new AtomicInteger(0); long startTime = System.currentTimeMillis(); AccountId receiverId = AccountId.fromString("RECEIVER_ACCOUNT_ID"); // 批量提交交易任务 for (int i = 0; i < 10000; i++) { executor.submit(() -> { try { TransactionResponse response = new CryptoTransferTransaction() .addSender(client.getOperatorAccountId(), Hbar.fromTinybars(1000)) .addReceiver(receiverId, Hbar.fromTinybars(1000)) .execute(client); response.getReceipt(client); completedTx.incrementAndGet(); } catch (Exception e) { e.printStackTrace(); } }); } executor.shutdown(); executor.awaitTermination(5, TimeUnit.MINUTES); long endTime = System.currentTimeMillis(); double tps = completedTx.get() / ((endTime - startTime) / 1000.0); System.out.printf("实际达成TPS: %.2f%n", tps); } } - 调整线程池大小、交易总量等参数,可模拟不同压力场景,灵活测试私有网络的性能极限。
内容的提问来源于stack exchange,提问作者lainhathoang
相关产品推荐
相关产品推荐

