繁体   English   中英

发送大量事务期间内存池溢出

[英]Overflowing mempool during sending a lot of transaction

在使用不同的其余服务器(我们使用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问题,请查看更多信息

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

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

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

Tendermint在将tx添加到mempool之前先验证签名,根据config/config.go#DefaultMempoolConfig大约需要0.5毫秒,因此验证20k tx实际上需要大约10 s,这不包括其他操作成本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM