色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

Linux內核內存泄漏怎么辦?

Linux閱碼場 ? 來源:Linuxer ? 作者:Linuxer ? 2021-02-20 17:14 ? 次閱讀

什么是內存泄漏:

程序向系統申請內存,使用完不需要之后,不釋放內存還給系統回收,造成申請的內存被浪費.

發現系統中內存使用量隨著時間的流逝,消耗的越來越多,例如下圖所示:

2146195a-71ad-11eb-8b86-12bb97331649.png

接下來的排查思路是:

1.監控系統中每個用戶進程消耗的PSS (使用pmap工具(pmap pid)).

PSS:按比例報告的物理內存,比如進程A占用20M物理內存,進程B和進程A共享5M物理內存,那么進程A的PSS就是(20 - 5) + 5/2 = 17.5M

2.監控/proc/meminfo輸出,重點觀察Slab使用量和slab對應的/proc/slabinfo信息

3.參考/proc/meminfo輸出,計算系統中未被統計的內存變化,比如內核驅動代碼

直接調用alloc_page()從buddy中拿走的內存不會被單獨統計

以上排查思路分別對應下圖中的1,2,3 :

21681050-71ad-11eb-8b86-12bb97331649.png

在排查的過程中發現系統非常空閑,都沒有跑任何用戶業務進程。

其中在使用slabtop監控slab的使用情況時發現size-4096 不停增長

2190c540-71ad-11eb-8b86-12bb97331649.png

通過監控/proc/slabinfo也發現SReclaimable 的使用量不停增長

while true; do sleep 1 ; cat /proc/slabinfo >> /tmp/slabinfo.txt ; echo "===" >> /tmp/slabinfo.txt ; done

由此判斷很可能是內核空間在使用size-4096 時發生了內存泄漏.

接下來使用trace event(tracepoint)功能來監控size-4096的使用和釋放過程,

主要用來跟蹤kmalloc()和kfree()函數對應的trace event, 因為他們的trace event被觸發之后會打印kmalloc()和kfree()所申請和釋放的內存地址,然后進一步只過濾申請4096字節的情況。

#trace-cmd record -e kmalloc -f 'bytes_alloc==4096' -e kfree -T

(-T 打印堆棧)

等待幾分鐘之后…

#ctrl ^c 中斷trace-cmd

#trace-cmd report

以上步驟相當于:

21bb5b0c-71ad-11eb-8b86-12bb97331649.png

等待幾分鐘之后…

#cp /sys/kernel/debug/tracing/trace_pipe /tmp/kmalloc-trace

從trace-cmd report的輸出結果來看,很多kmalloc 對應的ptr值都沒有kfree與之對應的ptr值

21e57f2c-71ad-11eb-8b86-12bb97331649.png

這就說明了cat進程在內核空間使用size-4096之后并沒有釋放,造成了內存泄漏。

為了進一步精確定位到是使用哪個內核函數造成的問題,此時手動觸發vmcore

#echo c > /proc/sysrq-trigger

然后使用crash工具分析vmcore:

#crash ./vmcore ./vmlinux.debug

讀出上面kmalloc申請的ptr內存信息

22431312-71ad-11eb-8b86-12bb97331649.png

(讀取0xffff880423744000內存開始的4096個字節,并以字符形式顯示)

22576916-71ad-11eb-8b86-12bb97331649.png

發現從上面幾個ptr內存中讀出的內容都是非常相似,仔細看一下發現都是/proc/schedstat 的輸出內容。

通過閱讀相關代碼發現,當讀出/proc/schedstat內容之后,確實沒有釋放內存

228f9db8-71ad-11eb-8b86-12bb97331649.png

然后發現kernel上游已經有patch解決了這個問題:

commit: 8e0bcc722289

fix a leak in /proc/schedstats

原文標題:一次解決Linux內核內存泄漏實戰全過程

文章出處:【微信公眾號:Linuxer】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    3

    文章

    1376

    瀏覽量

    40319
  • Linux
    +關注

    關注

    87

    文章

    11319

    瀏覽量

    209830

原文標題:一次解決Linux內核內存泄漏實戰全過程

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux下如何管理虛擬內存 使用虛擬內存時的常見問題

    Linux系統中,虛擬內存管理是操作系統內核的一個重要功能,負責管理物理內存和磁盤上的交換空間。以下是對Linux下如何管理虛擬
    的頭像 發表于 12-04 09:19 ?478次閱讀

    linux驅動程序如何加載進內核

    Linux系統中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是Linux驅動開發的基礎。在編
    的頭像 發表于 08-30 15:02 ?517次閱讀

    Linux內核測試技術

    Linux 內核Linux操作系統的核心部分,負責管理硬件資源和提供系統調用接口。隨著 Linux 內核的不斷發展和更新,其復雜性和代碼規
    的頭像 發表于 08-13 13:42 ?521次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>測試技術

    大電流一體成型電感有噪音怎么辦

    電子發燒友網站提供《大電流一體成型電感有噪音怎么辦.docx》資料免費下載
    發表于 07-30 12:30 ?0次下載

    如何檢測內存泄漏

    檢測內存泄漏是軟件開發過程中一項至關重要的任務,它有助于識別和解決那些導致程序占用過多內存資源,從而影響程序性能甚至導致程序崩潰的問題。以下將詳細闡述幾種常見的內存
    的頭像 發表于 07-30 11:50 ?2041次閱讀

    想通過perf工具來檢查2段不同代碼的內存占用率,但一直沒找到,怎么辦

    想通過perf工具來檢查2段不同代碼的內存占用率,但一直沒找到,怎么辦
    發表于 05-17 13:33

    工控主板發生故障該怎么辦

    工控主板發生故障該怎么辦?前幾天有個客戶問了我這個問題,大部分情況下出現的故障并不可怕,主要是用戶粗心大意造成的。那今天小編就來講解一下工控主板一般會出現故障的主要原因及判斷方法:
    的頭像 發表于 04-11 18:19 ?898次閱讀

    電容負極熔斷怎么辦

    在現代科技發展的時代,電容器在各個領域都扮演著重要的角色。然而,由于各種原因,電容器的負極可能會發生熔斷的情況。那么,當電容器的負極熔斷時,我們應該怎么辦呢?
    的頭像 發表于 04-10 14:15 ?541次閱讀
    電容負極熔斷<b class='flag-5'>怎么辦</b>

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用堆內存的時候才會出現,棧內存不存在內存泄漏問題,因為棧
    發表于 03-19 11:38 ?540次閱讀
    C語言<b class='flag-5'>內存</b><b class='flag-5'>泄漏</b>問題原理

    【鴻蒙】webview內存泄漏問題的分析報告

    1 關鍵字 webview;內存泄漏 2 問題描述 問題現象:在 3.1release 版本和 3.2bete1 版本中,在 RK3568 上使用 etsWeb 和其他瀏覽器時,webview 所占
    的頭像 發表于 03-02 15:12 ?2179次閱讀

    Linux內核內存管理之內核非連續物理內存分配

    的主要優點是避免了外部碎片,而缺點是需要修改內核頁表。顯然,非連續內存區域的大小必須是4096的倍數。Linux使用非連續物理內存區的場景有幾種:(1)為swap區分配數據結構;(2)
    的頭像 發表于 02-23 09:44 ?1010次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>內存</b>管理之<b class='flag-5'>內核</b>非連續物理<b class='flag-5'>內存</b>分配

    Linux內核內存管理之ZONE內存分配器

    內核中使用ZONE分配器滿足內存分配請求。該分配器必須具有足夠的空閑頁幀,以便滿足各種內存大小請求。
    的頭像 發表于 02-21 09:29 ?917次閱讀

    linux用gdb調試遇到函數調用怎么辦

    linux用gdb調試遇到函數調用怎么辦? 在Linux上使用GDB調試時,遇到函數調用是一個常見的情況。函數調用可能涉及到多個函數、多個文件,這就需要我們仔細審查代碼,理解函數之間的關系和參數傳遞
    的頭像 發表于 01-31 10:33 ?734次閱讀

    修復輥壓機軸承位磨損怎么辦

    電子發燒友網站提供《修復輥壓機軸承位磨損怎么辦.docx》資料免費下載
    發表于 01-23 09:52 ?0次下載

    linux內核主要由哪幾個部分組成,作用是什么

    Linux內核主要由以下幾個部分組成: 進程管理:Linux內核負責管理和調度系統中的進程。它通過進程調度算法來決定哪個進程在什么時間運行以及如何分配系統資源。
    的頭像 發表于 01-22 14:34 ?2717次閱讀
    主站蜘蛛池模板: 日本毛片久久国产精品| 免费的好黄的漫画| 91精品国产高清久久久久久| 亚洲国产在线2o20| 污到湿的爽文免费阅读| 青青草在现线免费观看| 欧美深深色噜噜狠狠yyy| 免费国产足恋网站| 免费果冻传媒2021视频| 男人桶爽女人| 欧美丰满熟妇无码XOXOXO| 免费国产在线观看| 男gv纯肉免费视频| 免费伦理片网站| 男人日女人的b| 欧美亚洲精品一区二三区8V| 欧美亚洲日韩在线在线影院| 欧美性色xo影院69| 日韩高清在线亚洲专区| 色婷婷AV国产精品欧美毛片| 日韩精品欧美亚洲高清有无| 少妇高潮A片特黄久久精品网| 视频一区在线免费观看| 午夜福利免费院| 亚洲精品91| 伊人久久精品99热超碰| 中文字幕无线手机在线| 99久久婷婷国产麻豆精品电影| BT7086福利二区最新| 成人性生交大片| 国产精品久久久久久熟妇吹潮软件 | 亚洲区视频| 在线观看国产人视频免费中国| 中文字幕日本久久2019| 97久久精品人人槡人妻人| videos gratis欧美另类| 国产69精品久久久久乱码| 国产婷婷综合在线视频中文| 姐姐不~不可以动漫在线观看| 久草在线福利资站免费视频| 老司机无码精品A|