記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查-創(chuàng)新互聯(lián)

記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查

背景:測試同學(xué)運(yùn)行AElf單節(jié)點(diǎn)過程中,發(fā)現(xiàn)節(jié)點(diǎn)突然不再出塊,經(jīng)查看日志發(fā)現(xiàn) Worker(交易執(zhí)行進(jìn)程) 全部掉線,無法繼續(xù)執(zhí)行交易,從而導(dǎo)致節(jié)點(diǎn)掛掉。

創(chuàng)新互聯(lián)公司主營周寧網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),周寧h5微信小程序搭建,周寧網(wǎng)站營銷推廣歡迎周寧等地區(qū)企業(yè)咨詢

aelf的GitHub鏈接:https://github.com/AElfProject/AElf

初步定位問題:出現(xiàn)這個問題很奇怪,因?yàn)楣?jié)點(diǎn)和所有 Worker 在同一臺服務(wù)器上,網(wǎng)絡(luò)通信應(yīng)該不會有問題,再者發(fā)現(xiàn),主節(jié)點(diǎn)、所有 Woker 和 Lighthouse 幾乎在同一時間全部掉線。然后繼續(xù)排查,通過 zabbix監(jiān)控找到了問題,服務(wù)器在一個時間點(diǎn)內(nèi)存幾乎被耗盡,通過觀察時間,發(fā)現(xiàn)與節(jié)點(diǎn)出現(xiàn)異常時間吻合。

復(fù)現(xiàn)問題:我們重點(diǎn)對內(nèi)存使用進(jìn)行測試。測試發(fā)現(xiàn),隨著節(jié)點(diǎn)長時間運(yùn)行,進(jìn)程占用服務(wù)器內(nèi)存在不斷增加,尤其在持續(xù)發(fā)了大量交易后,內(nèi)存使用增長明顯,并且停止發(fā)交易后,內(nèi)存也并不會下降。

下面是具體的復(fù)現(xiàn)步驟:
首先介紹服務(wù)環(huán)境,我們使用Ubuntu 16.04.5 LTS,dotnet core 版本為2.1.402

節(jié)點(diǎn)剛開始運(yùn)行的情況:內(nèi)存使用大約為90M
記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
然后對節(jié)點(diǎn)持續(xù)發(fā)大量交易,我們可以通過監(jiān)控看到節(jié)點(diǎn)交易池堆積大量交易并不斷在執(zhí)行

記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
持續(xù)一段時間后,內(nèi)存占用已經(jīng)達(dá)到1G

記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
此時停止發(fā)交易,等待交易執(zhí)行,我們通過監(jiān)控看到交易池中的交易已都被執(zhí)行。

記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
等待一段時間后,此時我們繼續(xù)觀察內(nèi)存占用,發(fā)現(xiàn)內(nèi)存使用還是不會減少,一直保持1G 的水平

分析問題:

接下來我們使用lldb分析我們的節(jié)點(diǎn)。

首先在服務(wù)器上安裝 lldb

sudo apt-get install lldb

找到本機(jī)ibsosplugin.so位置

find /usr -name libsosplugin.so

啟動 lldb并附加到進(jìn)程

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區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
我們可以看到有大量的以下對象

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字節(jié)對象
記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
可以看有4個對象同類型的對象比較大

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

再進(jìn)一步查看MethodTable對應(yīng)的對象
記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
可以看到有8個對象,其中4個較大,挑選其中一個查看對象信息,發(fā)現(xiàn)里面存儲了573437個值。

記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
基于以上分析結(jié)果,排查對應(yīng)源代碼,定位到類:AElf.Kernel.TxHub。該類主要作用是存儲交易池交易數(shù)據(jù)。該類包含8個ConcurrentDictionary<Hash, TransactionHolder>用于存儲交易數(shù)據(jù),而TransactionHolder類中有存儲了Hash、Transaction 等類型,與上面內(nèi)存分析的結(jié)果吻合。再繼續(xù)看內(nèi)部邏輯,發(fā)現(xiàn)所有交易進(jìn)入交易池后一直存儲在TxHub中,不再進(jìn)行釋放。到此為止基本上定位問題所在。

待問題修復(fù)后重復(fù)上面步驟進(jìn)行驗(yàn)證,效果比較明顯,待交易池交易執(zhí)行完畢后,內(nèi)存占用有明顯下降,最終內(nèi)存占用如下
記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
繼續(xù)看下內(nèi)存中對象的情況,可以看到對象總數(shù)也有了明顯的下降。

記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查
但是仍存在內(nèi)存少量增長的現(xiàn)象,并且有大對象駐留內(nèi)存的情況,此問題會進(jìn)一步跟進(jìn)分析。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標(biāo)題:記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長問題排查-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://muchs.cn/article2/phhic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站改版用戶體驗(yàn)、虛擬主機(jī)ChatGPT、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化