內(nèi)存分析BPF工具-創(chuàng)新互聯(lián)

內(nèi)核和處理器負(fù)責(zé)將虛擬內(nèi)存映射到物理內(nèi)存。為了提高效率,會在稱為頁面的內(nèi)存組中創(chuàng)建內(nèi)存映射,其中每個頁面的大小是處理器的詳細(xì)信息。盡管大多數(shù)處理器也支持更大的容量,但通常有4 KB,Linux稱其為 hugepage大頁面。內(nèi)核可以從其自己的空閑列表中為物理內(nèi)存頁面請求提供服務(wù),內(nèi)核為每個DRAM組和CPU維護(hù)這些請求以提高效率。內(nèi)核自己的軟件也通常通過內(nèi)核分配器(例如slab分配器)從這些空閑列表中消耗內(nèi)存。

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴展宣傳的重要窗口,一個合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺,創(chuàng)新互聯(lián)建站面向各種領(lǐng)域:成都玻璃貼膜網(wǎng)站設(shè)計、全網(wǎng)整合營銷推廣解決方案、網(wǎng)站設(shè)計等建站排名服務(wù)。

內(nèi)存分析BPF工具

內(nèi)存分析BPF工具

內(nèi)存頁和交換

典型的用戶內(nèi)存頁面的生命周期如圖7-2所示,其中列舉了以下步驟:

1. 應(yīng)用程序從內(nèi)存分配請求開始(例如,libc malloc() )。

2. 分配庫可以從其自己的空閑列表中為內(nèi)存請求提供服務(wù),或者它可能需要擴展虛擬內(nèi)存來容納。根據(jù)分配庫,它將:

1. 通過調(diào)用brk() syscall并將堆內(nèi)存用于分配來擴展堆的大小。

2. 通過mmap()系統(tǒng)調(diào)用創(chuàng)建一個新的內(nèi)存段。

3. 稍后,應(yīng)用程序嘗試通過存儲和加載指令使用分配的內(nèi)存范圍,這涉及調(diào)用處理器內(nèi)存管理單元(MMU)進(jìn)行虛擬到物理地址的轉(zhuǎn)換。至此,虛擬內(nèi)存的謊言就暴露出來了:該地址沒有映射!這會導(dǎo)致稱為頁面錯誤的MMU錯誤。

4. 頁面錯誤由內(nèi)核處理,內(nèi)核建立從其物理內(nèi)存可用列表到虛擬內(nèi)存的映射,然后將該映射通知MMU以供以后查找?,F(xiàn)在,該過程占用了額外的物理內(nèi)存頁面。進(jìn)程使用的物理內(nèi)存量稱為其駐留集大小(RSS)。

5. 當(dāng)系統(tǒng)上的內(nèi)存需求過多時,內(nèi)核頁面輸出守護(hù)程序(kswapd)可能會尋找可用的內(nèi)存頁面。它將釋放三種類型的內(nèi)存中的一種(盡管只有(c)如圖7-2所示,因為它顯示了用戶內(nèi)存頁面的生命周期):

1. 從磁盤讀取但未修改的文件系統(tǒng)頁面(稱為“由磁盤支持”):可以立即釋放這些頁面,并在需要時簡單地重新讀取。這些頁面是應(yīng)用程序可執(zhí)行的文本,數(shù)據(jù)和文件系統(tǒng)元數(shù)據(jù)。

2. 已修改的文件系統(tǒng)頁面:這些是“臟”的,必須先寫入磁盤,然后才能釋放它們。

3. 應(yīng)用程序內(nèi)存頁面:由于它們沒有文件來源,因此被稱為匿名內(nèi)存。如果正在使用交換設(shè)備,則可以先將它們存儲在交換設(shè)備上來釋放它們。將頁面寫到交換設(shè)備稱為交換(在Linux上)。

內(nèi)存分配請求通常是頻繁的活動:對于繁忙的應(yīng)用程序,用戶級別的分配每秒可能發(fā)生數(shù)百萬次。加載和存儲指令以及MMU查找更加頻繁。它們每秒可能發(fā)生數(shù)十億次。在圖7-2中,這些箭頭以粗體顯示。其他活動相對較少:brk()和mmap()調(diào)用,頁面錯誤和頁面退出(較亮的箭頭)。

page-out daemon頁面輸出守護(hù)程序

定期激活頁面輸出守護(hù)程序(kswapd)以掃描非活動和活動頁面的LRU列表,以尋找可用的內(nèi)存。如圖7-3所示,當(dāng)空閑內(nèi)存越過低閾值時它將被喚醒,而當(dāng)空閑內(nèi)存越過高閾值時將回到睡眠狀態(tài)。

內(nèi)存分析BPF工具

kswapd協(xié)調(diào)后臺頁面調(diào)出;除了CPU和磁盤I/O爭用外,這些不應(yīng)直接損害應(yīng)用程序性能。如果kswapd無法足夠快地釋放內(nèi)存,則會超過可調(diào)的最小頁面閾值,并使用直接回收;這是釋放內(nèi)存以滿足分配條件的前臺模式。在這種模式下,分配阻塞(停頓)并同步等待頁面被釋放。

直接回收可以調(diào)用內(nèi)核模塊收縮器函數(shù):這些釋放的內(nèi)存可能保留在緩存中的內(nèi)存,包括內(nèi)核slab緩存。

swap devices交換設(shè)備

交換設(shè)備為內(nèi)存不足的系統(tǒng)提供了降級的操作模式:進(jìn)程可以繼續(xù)分配,但是現(xiàn)在將不常使用的頁面移入和移出交換設(shè)備,這通常會使應(yīng)用程序運行得慢得多。

一些生產(chǎn)系統(tǒng)無需交換即可運行;這樣做的理由是,對于那些關(guān)鍵系統(tǒng)來說,降級的操作模式是永遠(yuǎn)無法接受的,因為這些關(guān)鍵系統(tǒng)可能有許多冗余(且運行狀況良好)服務(wù)器,比開始交換的服務(wù)器要好用得多。(例如,對于Netflix云實例,通常就是這種情況。)

如果無交換系統(tǒng)的內(nèi)存不足,則內(nèi)核oom killer會犧牲一個進(jìn)程。為了避免這種情況,將應(yīng)用程序配置為永不超過系統(tǒng)的內(nèi)存限制。

oom killer

Linux內(nèi)存不足殺手是釋放內(nèi)存的最后手段:它將使用啟發(fā)式方法找到受害者進(jìn)程,并通過殺死它們來犧牲它們。啟發(fā)式尋找將釋放許多頁面的大受害者,并且這不是關(guān)鍵任務(wù),例如內(nèi)核線程或init(PID 1)。Linux提供了在整個系統(tǒng)和每個進(jìn)程中調(diào)整OOM殺手的行為的方法。

page compaction頁面壓縮

隨著時間的流逝,釋放的頁面變得碎片化,從而使內(nèi)核很難根據(jù)需要分配較大的連續(xù)塊。內(nèi)核使用壓縮程序來移動頁面,從而釋放連續(xù)區(qū)域。

file system caching and buffering文件系統(tǒng)緩存和緩沖

Linux借用空閑內(nèi)存進(jìn)行文件系統(tǒng)緩存,并在有需求時將其恢復(fù)為空閑狀態(tài)。這種借用的結(jié)果是,在Linux啟動之后,系統(tǒng)報告的可用內(nèi)存趨向于零,這可能使用戶擔(dān)心系統(tǒng)實際上只是在預(yù)熱其文件系統(tǒng)緩存時會耗盡內(nèi)存。此外,文件系統(tǒng)使用內(nèi)存進(jìn)行回寫緩沖(write-back buffering)。

可以將Linux調(diào)整為更喜歡從文件系統(tǒng)緩存中釋放或通過交換釋放內(nèi)存(通過調(diào)整參數(shù)vm.swappiness)。

傳統(tǒng)的分析工具

傳統(tǒng)的性能工具提供了許多基于容量的內(nèi)存使用情況統(tǒng)計信息,包括每個進(jìn)程和系統(tǒng)范圍內(nèi)使用了多少虛擬和物理內(nèi)存,以及某些細(xì)分,例如按流程段或面板。分析內(nèi)存使用率超出基本知識,例如頁面錯誤率,分配庫,運行時或應(yīng)用程序?qū)γ總€分配都需要內(nèi)置的工具;或者可以使用像Valgrind這樣的虛擬機分析器;后一種方法可能會導(dǎo)致目標(biāo)應(yīng)用程序在檢測時運行速度慢10倍以上。BPF工具效率更高,開銷也更小。

Tool

Type

Description

dmesg

Kernel log

OOM killer event  details

swapon

Kernel  statistics

Swap device  usage

free

Kernel  statistics

System-wide  memory usage

ps

Kernel  statistics

Process  statistics, including memory usage

pmap

Kernel  statistics

Process memory  usage by segment

vmstat

Kernel statistics

Various  statistics, including memory

sar

Kernel  statistics

Can show page  fault and page scanner rates

perf

Software  events, hardware statistics, hardware sampling

Memory-related  PMC statistics and event sampling

用于內(nèi)存分析相關(guān)的BPF工具

內(nèi)存分析BPF工具

內(nèi)存相關(guān)的工具:

Tool

Source

Target

Description

oomkill

BCC/BT

OOM

Shows extra  info on OOM kill events

顯示oom相關(guān)的事件

memleak

BCC

Sched

Shows possible  memory leak code paths

顯示可能的內(nèi)存泄漏代碼路徑

mmapsnoop

Book

Syscalls

Traces mmap(2)  calls system-wide

跟蹤系統(tǒng)范圍內(nèi)的mmap調(diào)用

brkstack

Book

Syscalls

Shows brk()  calls with user stack traces

顯示帶有用戶堆棧跟蹤的brk()調(diào)用

shmsnoop

BCC

Syscalls

Traces shared  memory calls with details

跟蹤共享內(nèi)存調(diào)用的詳細(xì)信息

faults

Book

Faults

Shows page  faults, by user stack trace

通過用戶堆棧跟蹤顯示頁面錯誤

ffaults

Book

Faults

Shows page  faults, by filename

通過文件名顯示頁面錯誤

vmscan

Book

VM

Measures VM  scanner shrink and reclaim times

測量vm scaner的收縮和回收時間

drsnoop

BCC

VM

Traces direct  reclaim events, showing latency

跟蹤直接回收事件,顯示延遲

swapin

Book

VM

Shows swap-ins  by process

按進(jìn)程顯示swap情況

hfaults

Book

Faults

Shows huge  page faults, by process

按進(jìn)程顯示巨頁錯誤情況

此外,還有幾個用于內(nèi)存分析的BPF工具: kmem、kpages、 slabratetop、 numamove

oomkill

oomkill是一個BCC和bpftrace工具,用于跟蹤內(nèi)存不足殺手事件并打印詳細(xì)信息(例如平均負(fù)載)。平均負(fù)載為OOM時的系統(tǒng)狀態(tài)提供了一些額外的上下文,顯示了系統(tǒng)是否正在變得忙碌或穩(wěn)定。

內(nèi)存分析BPF工具

此輸出表明PID 18601(perl)需要內(nèi)存,這觸發(fā)了PID 1165(java)的OOM終止。PID 1165的內(nèi)存占用已達(dá)到18006224個pages;這些通常每頁4 KB,具體取決于處理器和進(jìn)程內(nèi)存設(shè)置。loadavg平均負(fù)載表明,在OOM終止時,系統(tǒng)變得更加繁忙。

該工具通過使用kprobes跟蹤oom_kill_process()函數(shù)并打印各種細(xì)節(jié)來工作。在這種情況下,只需讀取/proc/loadavg即可獲取平均負(fù)載。調(diào)試OOM事件時,可以根據(jù)需要增強此工具以打印其他詳細(xì)信息。此外,此工具尚未使用可以顯示有關(guān)如何選擇任務(wù)的更多詳細(xì)信息的oom跟蹤點。

memleak

memleak是一個BCC工具,可跟蹤內(nèi)存分配和空閑事件以及分配堆棧跟蹤。隨著時間的流逝,它可以顯示長期幸存者-尚未釋放的分配。

此示例顯示了在bash shell進(jìn)程上運行的memleak:

 內(nèi)存分析BPF工具

僅memleak不能告訴您這些分配是否是真正的內(nèi)存泄漏(內(nèi)存泄漏:指的是沒有引用并且永遠(yuǎn)不會釋放的已分配內(nèi)存),內(nèi)存增長還是長期分配。為了區(qū)分它們,需要研究和理解代碼路徑。

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

網(wǎng)頁題目:內(nèi)存分析BPF工具-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://muchs.cn/article46/eiohg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站網(wǎng)站建設(shè)、Google、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quá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)化