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

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

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

站在用戶的角度思考問題,與客戶深入溝通,找到通山網(wǎng)站設(shè)計(jì)與通山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋通山地區(qū)。

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

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

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

下面是具體的復(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ù)增長(zhǎng)問題排查
然后對(duì)節(jié)點(diǎn)持續(xù)發(fā)大量交易,我們可以通過監(jiān)控看到節(jié)點(diǎn)交易池堆積大量交易并不斷在執(zhí)行

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

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

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

分析問題:

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

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

sudo apt-get install lldb

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

find /usr -name libsosplugin.so

啟動(dòng) 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/

首先分析下對(duì)象

dumpheap -stat
記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長(zhǎng)問題排查
我們可以看到有大量的以下對(duì)象

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[]

我們?cè)倏聪麓笥?024字節(jié)對(duì)象
記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長(zhǎng)問題排查
可以看有4個(gè)對(duì)象同類型的對(duì)象比較大

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

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

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

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

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

當(dāng)前名稱:記AELF區(qū)塊鏈網(wǎng)絡(luò)的一次內(nèi)存持續(xù)增長(zhǎng)問題排查
文章路徑:http://bm7419.com/article0/gosoio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、網(wǎng)站改版、面包屑導(dǎo)航ChatGPT、定制網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)

廣告

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

成都網(wǎng)頁(yè)設(shè)計(jì)公司