关于测试CITA性能

我最近尝试测试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接口。

之前有些帖子讨论过性能的问题,比如 请教cita处理速度问题

用cita-cli做压测工具确实不太行。
用sdk写一个吧,其实挺简单的。

需要注意的是,cita的tps是靠并发数堆上去的,单线程的话肯定是压不上去的。
压测程序要多起点线程一起发交易。

准备一个有很多钱的账户,和一个没有钱的账户。
每个交易转1个token。最后看后面的账户有多少token就知道有多少交易上链了。

压测程序也挺消耗cpu的,最好是单独开一个服务器跑压测程序,跟节点服务器在同一个内网,走局域网。

1赞