91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分享一種更加隱秘且更難排查的"內(nèi)存泄漏"案例

冬至配餃子 ? 來(lái)源:OpenAnolis龍蜥 ? 作者:系統(tǒng)運(yùn)維SIG ? 2022-08-04 18:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、 問(wèn)題現(xiàn)象

客戶收到系統(tǒng)告警,K8S 集群某些節(jié)點(diǎn) used 內(nèi)存持續(xù)升高,top 查看進(jìn)程使用的內(nèi)存并不多,剩余內(nèi)存不足卻找不到內(nèi)存的使用者,內(nèi)存神秘消失,需要排查內(nèi)存去哪兒了。

pYYBAGLrm-yAY6-2AAA1XFawne0737.png

執(zhí)行 top 指令并按內(nèi)存排序輸出,內(nèi)存使用最多的進(jìn)程才 800M 左右,加起來(lái)遠(yuǎn)達(dá)不到 used 9G 的使用量。

pYYBAGLrm_-AAYBXAADnqlgfASU613.png

二、問(wèn)題分析

2.1 內(nèi)存去哪兒了?

在分析具體問(wèn)題前,我們先把系統(tǒng)內(nèi)存分類,便于找到內(nèi)存使用異常的地方,從內(nèi)存使用性質(zhì)上,可以簡(jiǎn)單把內(nèi)存分為應(yīng)用內(nèi)存和內(nèi)核內(nèi)存,兩種內(nèi)存使用量加上空閑內(nèi)存,應(yīng)該接近于 memory total,這樣區(qū)分能夠快速定位問(wèn)題的邊界。

pYYBAGLrnBGAPOyzAACyaqDzfTs924.png

其中 allocpage 指通過(guò) __get_free_pages/alloc_pages 等 API 接口直接從伙伴系統(tǒng)申請(qǐng)的內(nèi)存量(不包含 slab 和 vmalloc)。

2.1.1 內(nèi)存分析

根據(jù)內(nèi)存大圖分別計(jì)算應(yīng)用內(nèi)存和內(nèi)核內(nèi)存,就可以知道是哪部分存在異常,但這些指標(biāo)計(jì)算比較繁瑣,很多內(nèi)存值還存在重疊。針對(duì)這個(gè)痛點(diǎn),SysOM 運(yùn)維平臺(tái)的內(nèi)存大盤功能以可視化的方式展示內(nèi)存的使用情況,并直接給出內(nèi)存是否存在泄漏,本案例中,使用 SysOM 檢測(cè),直接顯示 allocpage 存在泄漏,使用量接近 6G。

pYYBAGLrnCaALRiZAACT7Ctp8W0635.png

2.1.2 allocpage 內(nèi)存

那既然是 alloc page 類型的內(nèi)存占用多,是否可以直接從 sysfs、procfs 文件節(jié)點(diǎn)查看其內(nèi)存使用了?很遺憾,這部分內(nèi)存是內(nèi)核/驅(qū)動(dòng)直接調(diào)用 __get_free_page/alloc_pages 等函數(shù)從伙伴系統(tǒng)申請(qǐng)單個(gè)或多個(gè)連續(xù)的頁(yè)面,系統(tǒng)層面沒(méi)有接口查詢這部分內(nèi)存使用詳情。如果這類內(nèi)存存在泄漏,就會(huì)出現(xiàn)"內(nèi)存憑空消失"的現(xiàn)象,比較難發(fā)現(xiàn),問(wèn)題原因也難排查。針對(duì)這個(gè)難點(diǎn),我們的SysOM系統(tǒng)運(yùn)維能夠覆蓋這類內(nèi)存統(tǒng)計(jì)和原因診斷。

所以需要進(jìn)一步通過(guò)SysOM的診斷利器 SysAK 動(dòng)態(tài)抓取這類內(nèi)存的使用情況。

2.2 allocPage 類型內(nèi)存排查

2.2.1 動(dòng)態(tài)診斷

對(duì)于內(nèi)核內(nèi)存泄漏,我們直接可以使用SysAK工具來(lái)動(dòng)態(tài)追蹤,啟動(dòng)命令并等待 10 分鐘。


sysak memleak -t page -i 600

pYYBAGLrnEWAFRNxAADn3Kd8KNE363.png

診斷結(jié)果顯示 10 分鐘內(nèi) receive_mergeable 函數(shù)分配的內(nèi)存有 4919 次沒(méi)有釋放,內(nèi)存大小在 300M 左右,分析到這里,我們就需要結(jié)合代碼來(lái)確認(rèn) receive_mergeable 函數(shù)的內(nèi)存分配和釋放邏輯是否正確。

2.2.2 分配和釋放總結(jié)

1)page_to_skb 每次會(huì)分配一個(gè)線性數(shù)據(jù)區(qū)為 128 Byte 的 skb。

2)數(shù)據(jù)區(qū)調(diào)用 alloc_pages_node 函數(shù),一次性從伙伴系統(tǒng)申請(qǐng) 32k 內(nèi)存(order=3)。

3)每個(gè) skb 會(huì)對(duì) 32k 的 head page 產(chǎn)生一次引用計(jì)數(shù),也就是只有當(dāng)所有 skb 都釋放時(shí),這 32k 內(nèi)存才釋放回伙伴系統(tǒng)。

4)receive_mergeable 函數(shù)負(fù)責(zé)申請(qǐng)內(nèi)存,但不負(fù)責(zé)釋放這部分內(nèi)存,只有當(dāng)應(yīng)用從 socket recvQ 中把數(shù)據(jù)讀走才會(huì)對(duì) head page 引用計(jì)數(shù)減一,當(dāng) page refs 為 0 時(shí),釋放回伙伴系統(tǒng)。

當(dāng)應(yīng)用消費(fèi)數(shù)據(jù)比較慢,可能會(huì)導(dǎo)致 receive_mergeable 函數(shù)申請(qǐng)的內(nèi)存釋放不及時(shí),而且最壞情況一個(gè) skb 會(huì)占用 32k 內(nèi)存,使用 sysak skcheck 檢查 socket 接收隊(duì)列和發(fā)送隊(duì)列殘留情況。

poYBAGLrnGeAbSX5AAAxjxKtPD4176.png

從輸出可以知道,系統(tǒng)中只有 nginx 進(jìn)程的接收隊(duì)列有殘留數(shù)據(jù),socket fd=11 的 Recv-Q 有接近 3M 的數(shù)據(jù)沒(méi)有接收,通過(guò)直接 kill 146935,系統(tǒng)內(nèi)存恢復(fù)正常了,所以問(wèn)題根本原因就是 nginx 沒(méi)有及時(shí)收走數(shù)據(jù)了。

三、問(wèn)題結(jié)論

經(jīng)過(guò)與業(yè)務(wù)方溝通,最終確認(rèn)是業(yè)務(wù)配置問(wèn)題,導(dǎo)致 nginx 有一個(gè)線程沒(méi)有處理數(shù)據(jù),從而導(dǎo)致網(wǎng)卡驅(qū)動(dòng)申請(qǐng)的內(nèi)存沒(méi)有及時(shí)釋放,而 allocpage 內(nèi)存又是無(wú)法統(tǒng)計(jì)的,從而出現(xiàn)內(nèi)存憑空消失的現(xiàn)象。

3.1 結(jié)論驗(yàn)證

接收隊(duì)列真的有數(shù)據(jù)殘留嗎,這里結(jié)合 crash 工具的 files 指令通過(guò) fd 找到對(duì)應(yīng)的sock:

pYYBAGLrnIaAdnjfAAAkz9cyEIM313.pngpoYBAGLrnIqAF_KfAABs_kiIow8718.png

通過(guò)多次觀察,發(fā)現(xiàn) sk_receive_queue 上的 skb 長(zhǎng)時(shí)間沒(méi)有變化,這也證明了 nginx 沒(méi)有及時(shí)處理接收隊(duì)列上的 skb,導(dǎo)致在網(wǎng)卡驅(qū)動(dòng)中分配的內(nèi)存沒(méi)有釋放。

四、內(nèi)存泄漏疑點(diǎn)

在排查過(guò)程還遇到一個(gè)非常較困惑的地方,sockstat 和 slabtop 看檢查 tcp mem 和 skbuff_head_cache 使用都很正常,導(dǎo)致進(jìn)一步掩蓋了網(wǎng)絡(luò)占用的內(nèi)存。

tcp mem = 32204*4K=125M

pYYBAGLrnJuAU40-AABuwzHCwEM413.png

skb 數(shù)量在 1.5萬(wàn)~3 萬(wàn)之間。

pYYBAGLrnLCAB8kbAACuYu-fgi8001.png

按照前面分析,一個(gè)skb最壞情況占用 32k 內(nèi)存,那么 2 萬(wàn)個(gè) skb 最大也就占 600M 左右,怎么會(huì)占用幾個(gè) G 了,難道分析有問(wèn)題?如下圖所示,skb 的非線性區(qū)可能還存在若干個(gè) frag page,而每個(gè) frag page 又可能由 compund page 組成。

poYBAGLrnMOAVTdnAACp_fOZ6gk818.png

用 crash 實(shí)際讀取 skb 內(nèi)存發(fā)現(xiàn),有些 skb 存在 17 個(gè) frag page,并且數(shù)據(jù)大小只有 10 Byte。

poYBAGLrnNiAYRhmAAC9APZ8D8g090.png

解析 frag page 的 order 為 3,意味著一個(gè) frag page 占用 32k 內(nèi)存。

poYBAGLrnOqALTZFAABW7fT4PTk229.png

極端情況下,一個(gè) skb 可能占用(1+17)*8=144 頁(yè),上圖 slabinfo 中skbuff_head_cache 活躍 object 數(shù)量為 15033 個(gè),所以理論最大總內(nèi)存 =144*15033*4K = 8.2G,而我們現(xiàn)在遇到的場(chǎng)景消耗 6G 的內(nèi)存是完全有可能的。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9525

    瀏覽量

    157074
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1957

    瀏覽量

    88563
  • 內(nèi)存泄漏
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    9520
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    分享一種內(nèi)存泄漏定位排查技巧

    的調(diào)試工具,下面分享一種內(nèi)存泄漏定位排查技巧。1.對(duì)malloc,free進(jìn)行封裝首先,我們對(duì)malloc,f
    發(fā)表于 12-17 08:13

    教你如何搭建淺層神經(jīng)網(wǎng)絡(luò)"Hello world"

    作為圖像識(shí)別與機(jī)器視覺(jué)界的 "hello world!" ,MNIST ("Modified National Institute of Standards and Technology&
    的頭像 發(fā)表于 12-10 18:35 ?1553次閱讀

    "STM32F0 Error: Flash Download failed - ""Cortex-M0""解決"

    開(kāi)發(fā)工具CUbemx + Keil uVision5(MDK V5)錯(cuò)誤現(xiàn)象在STM32F0燒錄程序是出現(xiàn)了Error: Flash Download failed - &quot
    發(fā)表于 12-01 12:06 ?34次下載
    &<b class='flag-5'>quot</b>;STM32F0 Error: Flash Download failed  -  &<b class='flag-5'>quot</b>;&<b class='flag-5'>quot</b>;Cortex-M0&<b class='flag-5'>quot</b>;&<b class='flag-5'>quot</b>;解決&<b class='flag-5'>quot</b>;

    芯片工藝的&amp;quot;7nm&amp;quot; 、&amp;quot;5nm&amp;quot;到底指什么?

    近幾年,芯片產(chǎn)業(yè)越來(lái)越火熱,些行業(yè)內(nèi)的術(shù)語(yǔ)大家也聽(tīng)得比較多了。那么工藝節(jié)點(diǎn)、制程是什么,&quot;7nm&quot; 、&quot;5nm&qu
    的頭像 發(fā)表于 07-28 17:34 ?1.3w次閱讀
    芯片工藝的&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;7nm&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>; 、&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;5nm&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;到底指什么?

    全方位精準(zhǔn)測(cè)量技術(shù)助力:中國(guó)經(jīng)濟(jì)加力發(fā)展向前&amp;amp;quot;進(jìn)&amp;amp;quot;

    全方位精準(zhǔn)測(cè)量技術(shù)助力:中國(guó)經(jīng)濟(jì)加力發(fā)展向前&quot;進(jìn)&quot;
    的頭像 發(fā)表于 07-15 09:53 ?2443次閱讀
    全方位精準(zhǔn)測(cè)量技術(shù)助力:中國(guó)經(jīng)濟(jì)加力發(fā)展向前&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;進(jìn)&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    3分鐘讀懂 | 氣密性檢測(cè)儀如何&amp;amp;quot;揪出&amp;amp;quot;泄漏點(diǎn)?原理全拆解!

    地&quot;揪出&quot;泄漏點(diǎn)的呢?今天,我們就用3分鐘,帶你徹底搞懂氣密性檢測(cè)儀的工作原理!、氣密性檢測(cè)儀是什么?氣密性檢測(cè)儀,顧名思義,就是用來(lái)檢測(cè)物體密封性能的設(shè)備。它通
    的頭像 發(fā)表于 03-15 16:13 ?1340次閱讀
    3分鐘讀懂 | 氣密性檢測(cè)儀如何&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;揪出&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;<b class='flag-5'>泄漏</b>點(diǎn)?原理全拆解!

    電纜局部放電在線監(jiān)測(cè):守護(hù)電網(wǎng)安全的&amp;amp;quot;黑科技&amp;amp;quot;

    文章由山東華科信息技術(shù)有限公司提供在萬(wàn)家燈火的背后,有張覆蓋全國(guó)的&quot;能源神經(jīng)網(wǎng)絡(luò)&quot;晝夜不息地運(yùn)轉(zhuǎn)。電纜作為電力輸送的&quot;主動(dòng)脈&
    的頭像 發(fā)表于 04-14 18:12 ?975次閱讀
    電纜局部放電在線監(jiān)測(cè):守護(hù)電網(wǎng)安全的&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;黑科技&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    倉(cāng)儲(chǔ)界的&amp;quot;速效救心丸&amp;quot;,Ethercat轉(zhuǎn)PROFINET網(wǎng)關(guān)實(shí)戰(zhàn)案例

    實(shí)戰(zhàn)案例,Ethercat轉(zhuǎn)PROFINET網(wǎng)關(guān),倉(cāng)儲(chǔ)界的&quot;速效救心丸&quot;
    的頭像 發(fā)表于 05-11 10:32 ?782次閱讀
    倉(cāng)儲(chǔ)界的&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;速效救心丸&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;,Ethercat轉(zhuǎn)PROFINET網(wǎng)關(guān)實(shí)戰(zhàn)案例

    為什么GNSS/INS組合被譽(yù)為導(dǎo)航界的&amp;amp;quot;黃金搭檔&amp;amp;quot;?

    在導(dǎo)航技術(shù)領(lǐng)域,GNSS(全球?qū)Ш叫l(wèi)星系統(tǒng))和INS(慣性導(dǎo)航系統(tǒng))的結(jié)合,直被業(yè)界譽(yù)為&quot;黃金搭檔&quot;。它們優(yōu)勢(shì)互補(bǔ),克服了單系統(tǒng)的局限性,為高精度、高可靠性的導(dǎo)
    的頭像 發(fā)表于 07-09 17:12 ?975次閱讀
    為什么GNSS/INS組合被譽(yù)為導(dǎo)航界的&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;黃金搭檔&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;?

    光耦合器:電子世界的 &amp;quot;光橋梁&amp;quot;

    在現(xiàn)代電子設(shè)備的復(fù)雜電路中,信號(hào)的傳輸與隔離至關(guān)重要。就像城市交通中需要橋梁來(lái)跨越障礙、連接不同區(qū)域樣,電子電路里也需要座 &quot;橋梁&quot; 來(lái)實(shí)現(xiàn)信號(hào)的安全、高效傳輸
    的頭像 發(fā)表于 08-22 16:58 ?1034次閱讀

    為什么變頻器開(kāi),監(jiān)控畫(huà)面就&amp;amp;quot;雪花&amp;amp;quot;?

    當(dāng)你的工廠監(jiān)控畫(huà)面總是&quot;雪花&quot;閃爍,變頻器啟動(dòng)就跳線,你是不是以為是攝像頭老化了?其實(shí),90%的這類問(wèn)題都是變頻器諧波在作怪!這不是攝像頭的錯(cuò),而是變頻器輸出的高次諧波干擾了
    的頭像 發(fā)表于 09-23 14:17 ?645次閱讀
    為什么變頻器<b class='flag-5'>一</b>開(kāi),監(jiān)控畫(huà)面就&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;雪花&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;?

    &amp;quot;Access violation&amp;quot; 錯(cuò)誤,復(fù)位位置,重新打印

    &quot;Access violation&quot; 錯(cuò)誤
    的頭像 發(fā)表于 11-08 07:16 ?551次閱讀

    L3試點(diǎn)落地,和芯星通如何成為車企突圍的&amp;amp;quot;隱形守護(hù)者&amp;amp;quot;?

    當(dāng)長(zhǎng)安汽車與北汽極狐拿到中國(guó)首批L3級(jí)自動(dòng)駕駛準(zhǔn)入許可的那刻,整個(gè)產(chǎn)業(yè)鏈等待多年的&quot;靴子&quot;終于落地。在這個(gè)責(zé)任主體從駕駛員轉(zhuǎn)向車企的關(guān)鍵轉(zhuǎn)折下,系統(tǒng)可靠性成為真正的&qu
    的頭像 發(fā)表于 01-04 12:03 ?550次閱讀
    L3試點(diǎn)落地,和芯星通如何成為車企突圍的&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;隱形守護(hù)者&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;?

    選EtherCAT模塊,別只看價(jià)格,先看&amp;amp;quot;體檢報(bào)告&amp;amp;quot;

    ±8kV靜電、±2kV浪涌、-42℃極寒、1500V高壓—這不是極限運(yùn)動(dòng),而是DPort-ECT模塊的出廠&quot;必修課&quot;。本文詳解工業(yè)級(jí)EtherCAT從站如何通過(guò)嚴(yán)苛測(cè)試關(guān)
    的頭像 發(fā)表于 02-04 11:46 ?267次閱讀
    選EtherCAT模塊,別只看價(jià)格,先看&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;體檢報(bào)告&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;

    從&amp;amp;quot;替代人力&amp;amp;quot;到&amp;amp;quot;智能協(xié)同&amp;amp;quot;:履帶式巡檢機(jī)器人的產(chǎn)業(yè)躍遷

    2026年的工業(yè)智能化轉(zhuǎn)型浪潮中,個(gè)顯著的趨勢(shì)正在形成——工業(yè)巡檢機(jī)器人正從單純的&quot;人力替代工具&quot;升級(jí)為具備感知、決策與協(xié)同能力的&quot;智能體&
    的頭像 發(fā)表于 02-05 10:42 ?267次閱讀