发送大量交易期间内存池溢出

时间:2019-08-20 08:03:15

标签: blockchain tendermint

在使用不同的其余服务器(我们使用2个或4个节点/服务器)发送大量事务期间,内存池始终溢出并且服务器开始过载,块关闭了很长时间,这取决于事务量,交易越多,关闭区块所需的时间就越多,通常在20秒到20分钟之间。例如,当我发送20k txs时,mempool会填满20k笔交易,然后在20秒内关闭所有交易。如果我们发送30万笔交易,则内存池最多会填满+ -280k,并在20分钟内用〜123,〜123,〜25 txs关闭了3个区块,但是在这20分钟内,minimmint始终会出现“ err =“ pong timeout””错误, “ err = EOF”,“用于封闭的网络连接”等等。另外,我们使用cosmos-sdk无法关闭自动生成块。 https://github.com/tendermint/tendermint/issues/3905-这是github问题,请检查以获取更多信息

我尝试更改节点配置,但更改不多

我不知道我需要做什么,但是我们在内存池方面遇到了麻烦,也没有决心。伙计们,您是否知道该怎么办?

1 个答案:

答案 0 :(得分:0)

Tendermint使用两个例程p2p/conn/connection.go#recvRoutine和  p2p/conn/connection.go#sendRoutine处理传入消息和发送响应,并且两者都是顺序的。因此,如果一个节点正在处理新的tx并迭代调用反应堆,则它会在所有反应堆之前被阻塞(对于基本反应堆,请参见node/node.go#createSwitch)。

Tendermint在将tx添加到内存池之前会验证签名,根据config/config.go#DefaultMempoolConfig大约需要0.5毫秒,因此不计其他操作成本,验证20k txes大约需要10s。