我最近尝试测试cita的性能,但是没做过压力测试相关,下面是我的一些尝试。
我先搜了一下,看到有一些压力测试的工具,类似ab, siege。简单的看了一下 siege,发现它只能进行 web 服务测试,而我需要并发的发起很多交易,而且是借助 cita-cli 工具发起交易。
然后我写了一个脚本,脚本主要让cita-cli发起交易后就在后台运行:
#!/bin/bash
# Our custom function
cust_func(){
echo "tx $1"
cita-cli transfer --address xxx --private-key xxx --value 100000 --url http://x.x.x.x:1338
}
for i in {1..100000}
do
cust_func &i &
sleep 0.001
done
wait
echo "All done"
但是其实这个有一些问题,包括本身这个脚本跑起来占用很多CPU,刚开始再某个节点上跑,结果CPU直接90%+,本身占用了节点服务器的资源。因此我把这个脚本放在另外一台服务器上运行。
还有个问题cita-cli在构造交易还会去查询当前块高,以及 chain 版本之类的一些信息,可能有IO阻塞,而且有时会报错查不到。然后那笔交易就无法构成。
最后最高一个块大概包含 1200 多交易吧,平均每个块也就 300 条左右的交易。此时节点服务器的只占用了50%-60%的CPU吧。节点服务器和跑脚本的服务器配置为阿里云 4核8G。交易均为简单的转账交易。我觉得主要的问题是我给的“压力”还不够
然后我又试了批量交易。确实很快,一千多笔批量交易很快就完成了。但是按照我的理解,只有调用合约的交易才能发起批量交易,而且只有一次签名验签工作。
然后我的问题是有没有对CITA节点进行压力测试的工具,可能是基于SDK实现的一些代码。然后不仅可以测试节点的JSON-RPC接口,还可以测试缓存服务器提供的API接口。