记AELF区块链网络的一次内存持续增加问题排查

记AELF区块链网络的一次内存持续增加问题排查

背景:测试同窗运行AElf单节点过程当中,发现节点忽然再也不出块,经查看日志发现 Worker(交易执行进程) 所有掉线,没法继续执行交易,从而致使节点挂掉。git

aelf的GitHub连接:https://github.com/AElfProject/AElfgithub

初步定位问题:出现这个问题很奇怪,由于节点和全部 Worker 在同一台服务器上,网络通讯应该不会有问题,再者发现,主节点、全部 Woker 和 Lighthouse 几乎在同一时间所有掉线。而后继续排查,经过 zabbix监控找到了问题,服务器在一个时间点内存几乎被耗尽,经过观察时间,发现与节点出现异常时间吻合。服务器

复现问题:咱们重点对内存使用进行测试。测试发现,随着节点长时间运行,进程占用服务器内存在不断增长,尤为在持续发了大量交易后,内存使用增加明显,而且中止发交易后,内存也并不会降低。网络

下面是具体的复现步骤:
首先介绍服务环境,咱们使用Ubuntu 16.04.5 LTS,dotnet core 版本为2.1.402ide

节点刚开始运行的状况:内存使用大约为90M
在这里插入图片描述
而后对节点持续发大量交易,咱们能够经过监控看到节点交易池堆积大量交易并不断在执行区块链

在这里插入图片描述
持续一段时间后,内存占用已经达到1G测试

在这里插入图片描述
此时中止发交易,等待交易执行,咱们经过监控看到交易池中的交易已都被执行。日志

在这里插入图片描述
等待一段时间后,此时咱们继续观察内存占用,发现内存使用仍是不会减小,一直保持1G 的水平对象

分析问题:blog

接下来咱们使用lldb分析咱们的节点。

首先在服务器上安装 lldb

sudo apt-get install lldb

找到本机ibsosplugin.so位置

find /usr -name libsosplugin.so

启动 lldb并附加到进程

sudo lldb –p 13067

加载libsosplugin.so

plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.4/libsosplugin.so

setclrpath /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.4/

首先分析下对象

dumpheap -stat
在这里插入图片描述
咱们能够看到有大量的如下对象

AElf.Kernel.TransactionHolder

System.String

AElf.Common.Address

System.Collections.Concurrent.ConcurrentDictionary`2+Node[[AElf.Common.Hash,AElf.Common],[AElf.Kernel.TransactionHolder,AElf.Kernel.TxHub]]

AElf.Kernel.Transaction

AElf.Common.Hash

Google.Protobuf.ByteString

System.Byte[]

咱们再看下大于1024字节对象
在这里插入图片描述
能够看有4个对象同类型的对象比较大

System.Collections.Concurrent.ConcurrentDictionary`2+Node[[AElf.Common.Hash, AElf.Common],[AElf.Kernel.TransactionHolder, AElf.Kernel.TxHub]][]

再进一步查看MethodTable对应的对象
在这里插入图片描述
能够看到有8个对象,其中4个较大,挑选其中一个查看对象信息,发现里面存储了573437个值。

在这里插入图片描述
基于以上分析结果,排查对应源代码,定位到类:AElf.Kernel.TxHub。该类主要做用是存储交易池交易数据。该类包含8个ConcurrentDictionary<Hash, TransactionHolder>用于存储交易数据,而TransactionHolder类中有存储了Hash、Transaction 等类型,与上面内存分析的结果吻合。再继续看内部逻辑,发现全部交易进入交易池后一直存储在TxHub中,再也不进行释放。到此为止基本上定位问题所在。

待问题修复后重复上面步骤进行验证,效果比较明显,待交易池交易执行完毕后,内存占用有明显降低,最终内存占用以下
在这里插入图片描述
继续看下内存中对象的状况,能够看到对象总数也有了明显的降低。

在这里插入图片描述可是仍存在内存少许增加的现象,而且有大对象驻留内存的状况,此问题会进一步跟进分析。

相关文章
相关标签/搜索