女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

冬至配餃子 ? 來源:OpenAnolis龍蜥 ? 作者:系統運維SIG ? 2022-08-04 18:21 ? 次閱讀

一、 問題現象

客戶收到系統告警,K8S 集群某些節點 used 內存持續升高,top 查看進程使用的內存并不多,剩余內存不足卻找不到內存的使用者,內存神秘消失,需要排查內存去哪兒了。

pYYBAGLrm-yAY6-2AAA1XFawne0737.png

執行 top 指令并按內存排序輸出,內存使用最多的進程才 800M 左右,加起來遠達不到 used 9G 的使用量。

pYYBAGLrm_-AAYBXAADnqlgfASU613.png

二、問題分析

2.1 內存去哪兒了?

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

pYYBAGLrnBGAPOyzAACyaqDzfTs924.png

其中 allocpage 指通過 __get_free_pages/alloc_pages 等 API 接口直接從伙伴系統申請的內存量(不包含 slab 和 vmalloc)。

2.1.1 內存分析

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

pYYBAGLrnCaALRiZAACT7Ctp8W0635.png

2.1.2 allocpage 內存

那既然是 alloc page 類型的內存占用多,是否可以直接從 sysfs、procfs 文件節點查看其內存使用了?很遺憾,這部分內存是內核/驅動直接調用 __get_free_page/alloc_pages 等函數從伙伴系統申請單個或多個連續的頁面,系統層面沒有接口查詢這部分內存使用詳情。如果這類內存存在泄漏,就會出現"內存憑空消失"的現象,比較難發現,問題原因也難排查。針對這個難點,我們的SysOM系統運維能夠覆蓋這類內存統計和原因診斷

所以需要進一步通過SysOM的診斷利器 SysAK 動態抓取這類內存的使用情況。

2.2 allocPage 類型內存排查

2.2.1 動態診斷

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


sysak memleak -t page -i 600

pYYBAGLrnEWAFRNxAADn3Kd8KNE363.png

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

2.2.2 分配和釋放總結

1)page_to_skb 每次會分配一個線性數據區為 128 Byte 的 skb。

2)數據區調用 alloc_pages_node 函數,一次性從伙伴系統申請 32k 內存(order=3)。

3)每個 skb 會對 32k 的 head page 產生一次引用計數,也就是只有當所有 skb 都釋放時,這 32k 內存才釋放回伙伴系統。

4)receive_mergeable 函數負責申請內存,但不負責釋放這部分內存,只有當應用從 socket recvQ 中把數據讀走才會對 head page 引用計數減一,當 page refs 為 0 時,釋放回伙伴系統。

當應用消費數據比較慢,可能會導致 receive_mergeable 函數申請的內存釋放不及時,而且最壞情況一個 skb 會占用 32k 內存,使用 sysak skcheck 檢查 socket 接收隊列和發送隊列殘留情況。

poYBAGLrnGeAbSX5AAAxjxKtPD4176.png

從輸出可以知道,系統中只有 nginx 進程的接收隊列有殘留數據,socket fd=11 的 Recv-Q 有接近 3M 的數據沒有接收,通過直接 kill 146935,系統內存恢復正常了,所以問題根本原因就是 nginx 沒有及時收走數據了。

三、問題結論

經過與業務方溝通,最終確認是業務配置問題,導致 nginx 有一個線程沒有處理數據,從而導致網卡驅動申請的內存沒有及時釋放,而 allocpage 內存又是無法統計的,從而出現內存憑空消失的現象。

3.1 結論驗證

接收隊列真的有數據殘留嗎,這里結合 crash 工具的 files 指令通過 fd 找到對應的sock:

pYYBAGLrnIaAdnjfAAAkz9cyEIM313.pngpoYBAGLrnIqAF_KfAABs_kiIow8718.png

通過多次觀察,發現 sk_receive_queue 上的 skb 長時間沒有變化,這也證明了 nginx 沒有及時處理接收隊列上的 skb,導致在網卡驅動中分配的內存沒有釋放。

四、內存泄漏疑點

在排查過程還遇到一個非常較困惑的地方,sockstat 和 slabtop 看檢查 tcp mem 和 skbuff_head_cache 使用都很正常,導致進一步掩蓋了網絡占用的內存。

tcp mem = 32204*4K=125M

pYYBAGLrnJuAU40-AABuwzHCwEM413.png

skb 數量在 1.5萬~3 萬之間。

pYYBAGLrnLCAB8kbAACuYu-fgi8001.png

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

poYBAGLrnMOAVTdnAACp_fOZ6gk818.png

用 crash 實際讀取 skb 內存發現,有些 skb 存在 17 個 frag page,并且數據大小只有 10 Byte。

poYBAGLrnNiAYRhmAAC9APZ8D8g090.png

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

poYBAGLrnOqALTZFAABW7fT4PTk229.png

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



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8950

    瀏覽量

    153221
  • 驅動
    +關注

    關注

    12

    文章

    1900

    瀏覽量

    86539
  • 內存泄漏
    +關注

    關注

    0

    文章

    40

    瀏覽量

    9351
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    分享一種內存泄漏定位排查技巧

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

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

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

    教你如何搭建淺層神經網絡"Hello world"

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

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

    1、聊聊 好了,今天為大家帶來幾種IO口模擬串口"硬核"操作,相信大家對類似于串口這樣的電平類通信會有新的認識。 2、IO模擬串口需求 "IO模
    的頭像 發表于 02-10 11:51 ?5231次閱讀
    幾種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;

    開發工具CUbemx + Keil uVision5(MDK V5)錯誤現象在STM32F0燒錄程序是出現了Error: Flash Download failed - &amp;quot
    發表于 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;amp;quot;小巨人&amp;amp;quot;企業

    熱烈祝賀凌科電氣成功榮獲國家級專精特新“小巨人”企業凌科入選國家級專精特新“小巨人”企業近日,國家級專精特新&quot;小巨人&quot;企業名單公布,凌科電氣成功入選國家級專精特新&quot
    的頭像 發表于 08-26 16:33 ?955次閱讀
    喜訊 | 凌科電氣榮獲國家級專精特新&<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;7nm&amp;quot; 、&amp;quot;5nm&amp;quot;到底指什么?

    近幾年,芯片產業越來越火熱,些行業內的術語大家也聽得比較多了。那么工藝節點、制程是什么,&quot;7nm&quot; 、&quot;5nm&qu
    的頭像 發表于 07-28 17:34 ?1.1w次閱讀
    芯片工藝的&<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>;到底指什么?

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

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

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

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

    全方位精準測量技術助力:中國經濟加力發展向前&amp;amp;quot;進&amp;amp;quot;

    全方位精準測量技術助力:中國經濟加力發展向前&quot;進&quot;
    的頭像 發表于 07-15 09:53 ?623次閱讀
    全方位精準測量技術助力:中國經濟加力發展向前&<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>;

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

    地&quot;揪出&quot;泄漏點的呢?今天,我們就用3分鐘,帶你徹底搞懂氣密性檢測儀的工作原理!、氣密性檢測儀是什么?氣密性檢測儀,顧名思義,就是用來檢測物體密封性能的設備。它通
    的頭像 發表于 03-15 16:13 ?267次閱讀
    3分鐘讀懂 | 氣密性檢測儀如何&<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>點?原理全拆解!

    【硬核測評】凌華DAQE雙雄爭霸:工業數據采集界的&amp;amp;quot;速度與激情&amp;amp;quot;實戰解析

    在汽車碰撞測試的驚險瞬間,半導體晶圓的微觀世界,甚至是狂風呼嘯的風力發電場,場關于數據采集的&quot;軍備競賽&quot;正在上演。凌華科技推出的DAQE-2010與DAQE-2010(G)這對&
    的頭像 發表于 03-26 15:07 ?267次閱讀
    【硬核測評】凌華DAQE雙雄爭霸:工業數據采集界的&<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;amp;quot;電力心臟&amp;amp;quot;裝上智能聽診器

    可能因老化、受潮產生局部放電,如同潛伏的&quot;電蝕暗流&quot;,持續威脅著電力輸送的安全。如何為這顆&quot;心臟&quot;裝上智能監測裝置?隧道管廊變壓器局放在線監測系
    的頭像 發表于 04-09 16:37 ?222次閱讀
    隧道管廊變壓器局放在線監測:為地下&<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;amp;quot;黑科技&amp;amp;quot;

    文章由山東華科信息技術有限公司提供在萬家燈火的背后,有張覆蓋全國的&quot;能源神經網絡&quot;晝夜不息地運轉。電纜作為電力輸送的&quot;主動脈&
    的頭像 發表于 04-14 18:12 ?193次閱讀
    電纜局部放電在線監測:守護電網安全的&<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;,Ethercat轉PROFINET網關實戰案例

    實戰案例,Ethercat轉PROFINET網關,倉儲界的&quot;速效救心丸&quot;
    的頭像 發表于 05-11 10:32 ?207次閱讀
    倉儲界的&<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轉PROFINET網關實戰案例