在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

冬至配餃子 ? 來源:OpenAnolis龍蜥 ? 作者:系統(tǒng)運(yùn)維SIG ? 2022-08-04 18:21 ? 次閱讀

一、 問題現(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 左右,加起來遠(yuǎn)達(dá)不到 used 9G 的使用量。

pYYBAGLrm_-AAYBXAADnqlgfASU613.png

二、問題分析

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

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

pYYBAGLrnBGAPOyzAACyaqDzfTs924.png

其中 allocpage 指通過 __get_free_pages/alloc_pages 等 API 接口直接從伙伴系統(tǒ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)存值還存在重疊。針對這個痛點(diǎn),SysOM 運(yùn)維平臺的內(nèi)存大盤功能以可視化的方式展示內(nèi)存的使用情況,并直接給出內(nèi)存是否存在泄漏,本案例中,使用 SysOM 檢測,直接顯示 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ū)動直接調(diào)用 __get_free_page/alloc_pages 等函數(shù)從伙伴系統(tǒng)申請單個或多個連續(xù)的頁面,系統(tǒng)層面沒有接口查詢這部分內(nèi)存使用詳情。如果這類內(nèi)存存在泄漏,就會出現(xiàn)"內(nèi)存憑空消失"的現(xiàn)象,比較難發(fā)現(xiàn),問題原因也難排查。針對這個難點(diǎn),我們的SysOM系統(tǒng)運(yùn)維能夠覆蓋這類內(nèi)存統(tǒng)計(jì)和原因診斷

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

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

2.2.1 動態(tài)診斷

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


sysak memleak -t page -i 600

pYYBAGLrnEWAFRNxAADn3Kd8KNE363.png

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

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

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

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

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

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

當(dāng)應(yīng)用消費(fèi)數(shù)據(jù)比較慢,可能會導(dǎo)致 receive_mergeable 函數(shù)申請的內(nèi)存釋放不及時(shí),而且最壞情況一個 skb 會占用 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ù)沒有接收,通過直接 kill 146935,系統(tǒng)內(nèi)存恢復(fù)正常了,所以問題根本原因就是 nginx 沒有及時(shí)收走數(shù)據(jù)了。

三、問題結(jié)論

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

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

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

pYYBAGLrnIaAdnjfAAAkz9cyEIM313.pngpoYBAGLrnIqAF_KfAABs_kiIow8718.png

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

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

在排查過程還遇到一個非常較困惑的地方,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萬~3 萬之間。

pYYBAGLrnLCAB8kbAACuYu-fgi8001.png

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

poYBAGLrnMOAVTdnAACp_fOZ6gk818.png

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

poYBAGLrnNiAYRhmAAC9APZ8D8g090.png

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

poYBAGLrnOqALTZFAABW7fT4PTk229.png

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



審核編輯:劉清

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

    關(guān)注

    33

    文章

    8667

    瀏覽量

    151514
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1844

    瀏覽量

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

    關(guān)注

    0

    文章

    39

    瀏覽量

    9227
收藏 人收藏

    評論

    相關(guān)推薦

    LabVIEW的"連接字符串"VI,會造成內(nèi)存泄漏嗎?

    大家好。請教個問題,LabVIEW的"連接字符串"VI,會造成內(nèi)存泄漏嗎?如果會,那么,我們?nèi)绾伟汛诮邮盏臄?shù)據(jù),連接
    發(fā)表于 09-19 13:21

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

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

    為什么打印函數(shù)rt_kprintf("");會多個空行?

    請問達(dá)人們,為什么打印出來的行與行之間會多行? 突然中間就多行,圖2代碼如下,是例程。謝謝static void led2_thread_entry(void parameter)&amp
    發(fā)表于 11-08 10:13

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

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

    幾種IO口模擬串口"硬核"操作

    1、聊聊 好了,今天為大家?guī)韼追NIO口模擬串口"硬核"操作,相信大家對類似于串口這樣的電平類通信會有新的認(rèn)識。 2、IO模擬串口需求 "IO模
    的頭像 發(fā)表于 02-10 11:51 ?4909次閱讀
    幾種IO口模擬串口&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;硬核&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;操作

    &quot;STM32F0 Error: Flash Download failed - &quot;&quot;Cortex-M0&quot;&quot;解決&quot;

    開發(fā)工具CUbemx + Keil uVision5(MDK V5)錯誤現(xiàn)象在STM32F0燒錄程序是出現(xiàn)了Error: Flash Download failed - &amp;quot
    發(fā)表于 12-01 12:06 ?33次下載
    &<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;跨越地平線 &amp;quot;的電視和電話信號傳輸

    電話交談和電視圖像現(xiàn)在可以通過超高頻無線電波傳播,遠(yuǎn)遠(yuǎn)超出地平線。這點(diǎn)最近由貝爾電話實(shí)驗(yàn)室和麻省理工學(xué)院的科學(xué)家利用 &quot;超地平線 &quot;波傳播進(jìn)行了證明,這是無線電傳輸領(lǐng)域的
    發(fā)表于 10-11 10:00 ?1325次閱讀

    喜訊 | 凌科電氣榮獲國家級專精特新&amp;amp;quot;小巨人&amp;amp;quot;企業(yè)

    熱烈祝賀凌科電氣成功榮獲國家級專精特新“小巨人”企業(yè)凌科入選國家級專精特新“小巨人”企業(yè)近日,國家級專精特新&quot;小巨人&quot;企業(yè)名單公布,凌科電氣成功入選國家級專精特新&quot
    的頭像 發(fā)表于 08-26 16:33 ?771次閱讀
    喜訊 | 凌科電氣榮獲國家級專精特新&<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>;企業(yè)

    西門子博途LAD-( JMP ):若 RLO = &amp;quot;1&amp;quot; 則跳轉(zhuǎn)

    可以使用“若 RLO = &quot;1&quot; 則跳轉(zhuǎn)”指令中斷程序的順序執(zhí)行,并從其它程序段繼續(xù)執(zhí)行。
    的頭像 發(fā)表于 07-17 10:53 ?2066次閱讀
    西門子博途LAD-( JMP ):若 RLO = &<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;1&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>; 則跳轉(zhuǎn)

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

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

    橙群微電子NanoBeacon SoC 在 &amp;amp;quot;Truly Innovative Electronics &amp;amp;quot;評選中脫穎而出

    !TrulyInnovativeElectronics&quot;是由《ElectronicsForYou》雜志和Electronicsforu.com的技術(shù)記者發(fā)起的項(xiàng)活動,旨在表彰和推廣具有突破性的電子元件
    的頭像 發(fā)表于 08-18 08:32 ?645次閱讀
    橙群微電子NanoBeacon SoC 在  &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;Truly Innovative Electronics &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;評選中脫穎而出

    程控交流電源開機(jī)顯示&amp;quot;ERR&amp;quot;的原因及解決方法分析

    程控交流電源是一種常見的電源設(shè)備,用于為各種電子設(shè)備提供穩(wěn)定的交流電源。然而,有時(shí)候在開機(jī)時(shí),程控交流電源可能會顯示&quot;ERR&quot;的錯誤信息,使得設(shè)備無法正常工作。
    的頭像 發(fā)表于 11-07 11:14 ?1855次閱讀

    第二代配網(wǎng)行波故障預(yù)警與定位裝置YT/XJ-001:守護(hù)電力線路的超能&amp;amp;quot;哨兵&amp;amp;quot;

    第二代配網(wǎng)行波故障預(yù)警與定位裝置YT/XJ-001:守護(hù)電力線路的超能&quot;哨兵&quot; 電力,如同現(xiàn)代社會的血脈,支撐著我們的生活和工作正常運(yùn)行。然而,旦這條血脈出現(xiàn)故障,生活和工作
    的頭像 發(fā)表于 01-22 15:11 ?572次閱讀
    第二代配網(wǎng)行波故障預(yù)警與定位裝置YT/XJ-001:守護(hù)電力線路的超能&<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>;

    科沃斯掃地機(jī)器人通過TüV萊茵&amp;quot;防纏繞&amp;quot;和&amp;quot;高效邊角清潔&amp;quot;認(rèn)證

    3月15日,在2024中國家電及消費(fèi)電子博覽會(AWE)上,國際獨(dú)立第三方檢測、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國萊茵TüV大中華區(qū)(簡稱&quot;TüV萊茵&quot;)為科沃斯兩款掃地機(jī)器人(型號:DDX14、DDX11)
    的頭像 發(fā)表于 03-17 10:49 ?901次閱讀

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

    全方位精準(zhǔn)測量技術(shù)助力:中國經(jīng)濟(jì)加力發(fā)展向前&quot;進(jìn)&quot;
    的頭像 發(fā)表于 07-15 09:53 ?385次閱讀
    全方位精準(zhǔn)測量技術(shù)助力:中國經(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>;
    主站蜘蛛池模板: 国语一级毛片私人影院| 都市激情综合网| 手机在线观看a| 亚洲国产成人精品女人久久久| 亚洲国产精品久久久久婷婷老年| 亚洲成人免费在线| 三级网站免费| 美女免费视频是黄的| 免费看吻胸亲嘴激烈网站| 老色鬼久久综合第一| 国产精品四虎在线观看免费| 99久久婷婷国产综合精品电影 | 成人网男女啪啪免费网站| www.午夜色| 康熙古代高h细节肉爽文全文| 最黄色的视频| 四虎影视亚洲精品| 免费人成黄页在线观看日本| 国产一区二区三区美女在线观看| 7777在线| 免费高清特黄a 大片| 啪啪午夜视频| 被啪漫画羞羞漫画| 特级一级片| 麻豆三级在线播放| 2022欧美高清中文字幕在线看| 日本加勒比在线播放| 国产女人小便视频| 中国女人a毛片免费全部播放| 四虎影院永久免费| 激情网址在线观看| 天天舔天天干天天操| 91伊人网| 9久热久re爱免费精品视频| 色六月丁香| 国产福利在线观看你懂的| 人人搞人人干| 性网站免费| 色妞在线| 97国产影院| 国产精品久久久福利|