chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

Linux內(nèi)核內(nèi)存泄漏怎么辦?

Linux閱碼場(chǎng) ? 來源:Linuxer ? 作者:Linuxer ? 2021-02-20 17:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是內(nèi)存泄漏:

程序向系統(tǒng)申請(qǐng)內(nèi)存,使用完不需要之后,不釋放內(nèi)存還給系統(tǒng)回收,造成申請(qǐng)的內(nèi)存被浪費(fèi).

發(fā)現(xiàn)系統(tǒng)中內(nèi)存使用量隨著時(shí)間的流逝,消耗的越來越多,例如下圖所示:

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

接下來的排查思路是:

1.監(jiān)控系統(tǒng)中每個(gè)用戶進(jìn)程消耗的PSS (使用pmap工具(pmap pid)).

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

2.監(jiān)控/proc/meminfo輸出,重點(diǎn)觀察Slab使用量和slab對(duì)應(yīng)的/proc/slabinfo信息

3.參考/proc/meminfo輸出,計(jì)算系統(tǒng)中未被統(tǒng)計(jì)的內(nèi)存變化,比如內(nèi)核驅(qū)動(dòng)代碼

直接調(diào)用alloc_page()從buddy中拿走的內(nèi)存不會(huì)被單獨(dú)統(tǒng)計(jì)

以上排查思路分別對(duì)應(yīng)下圖中的1,2,3 :

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

在排查的過程中發(fā)現(xiàn)系統(tǒng)非常空閑,都沒有跑任何用戶業(yè)務(wù)進(jìn)程。

其中在使用slabtop監(jiān)控slab的使用情況時(shí)發(fā)現(xiàn)size-4096 不停增長

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

通過監(jiān)控/proc/slabinfo也發(fā)現(xiàn)SReclaimable 的使用量不停增長

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

由此判斷很可能是內(nèi)核空間在使用size-4096 時(shí)發(fā)生了內(nèi)存泄漏.

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

主要用來跟蹤kmalloc()和kfree()函數(shù)對(duì)應(yīng)的trace event, 因?yàn)樗麄兊膖race event被觸發(fā)之后會(huì)打印kmalloc()和kfree()所申請(qǐng)和釋放的內(nèi)存地址,然后進(jìn)一步只過濾申請(qǐng)4096字節(jié)的情況。

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

(-T 打印堆棧)

等待幾分鐘之后…

#ctrl ^c 中斷trace-cmd

#trace-cmd report

以上步驟相當(dāng)于:

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

等待幾分鐘之后…

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

從trace-cmd report的輸出結(jié)果來看,很多kmalloc 對(duì)應(yīng)的ptr值都沒有kfree與之對(duì)應(yīng)的ptr值

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

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

為了進(jìn)一步精確定位到是使用哪個(gè)內(nèi)核函數(shù)造成的問題,此時(shí)手動(dòng)觸發(fā)vmcore

#echo c > /proc/sysrq-trigger

然后使用crash工具分析vmcore:

#crash ./vmcore ./vmlinux.debug

讀出上面kmalloc申請(qǐng)的ptr內(nèi)存信息

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

(讀取0xffff880423744000內(nèi)存開始的4096個(gè)字節(jié),并以字符形式顯示)

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

發(fā)現(xiàn)從上面幾個(gè)ptr內(nèi)存中讀出的內(nèi)容都是非常相似,仔細(xì)看一下發(fā)現(xiàn)都是/proc/schedstat 的輸出內(nèi)容。

通過閱讀相關(guān)代碼發(fā)現(xiàn),當(dāng)讀出/proc/schedstat內(nèi)容之后,確實(shí)沒有釋放內(nèi)存

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

然后發(fā)現(xiàn)kernel上游已經(jīng)有patch解決了這個(gè)問題:

commit: 8e0bcc722289

fix a leak in /proc/schedstats

原文標(biāo)題:一次解決Linux內(nèi)核內(nèi)存泄漏實(shí)戰(zhàn)全過程

文章出處:【微信公眾號(hào):Linuxer】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    4

    文章

    1436

    瀏覽量

    42491
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11628

    瀏覽量

    217971

原文標(biāo)題:一次解決Linux內(nèi)核內(nèi)存泄漏實(shí)戰(zhàn)全過程

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    使用單片機(jī)系統(tǒng)時(shí)間不準(zhǔn)怎么辦?

    使用單片機(jī)系統(tǒng)時(shí)間不準(zhǔn),怎么辦?具體的是與晶振有關(guān)系還是MCU內(nèi)部有關(guān)系,時(shí)間一長顯示的時(shí)間就慢了
    發(fā)表于 12-05 07:51

    請(qǐng)問單片機(jī)RAM空間不夠用了怎么辦?

    單片機(jī)RAM空間不夠用了怎么辦
    發(fā)表于 11-25 08:09

    at_device 包 ml307長時(shí)間運(yùn)行有內(nèi)存泄漏問題怎么解決?

    使用 at_device 包中的 ml307 包長時(shí)間運(yùn)行有大量內(nèi)存泄漏問題,大概漲了20K,求助解決。
    發(fā)表于 09-24 07:41

    電腦開機(jī)每次自動(dòng)開啟很多軟件怎么辦?

    電腦開機(jī)每次自動(dòng)開啟很多軟件怎么辦
    發(fā)表于 07-17 06:40

    路由器能連上但是沒有網(wǎng)絡(luò)怎么辦?

    路由器能連上但是沒有網(wǎng)絡(luò)怎么辦
    發(fā)表于 07-10 06:15

    在OpenVINO? C++代碼中啟用 AddressSanitizer 時(shí)的內(nèi)存泄漏怎么解決?

    在 OpenVINO? C++代碼中啟用 AddressSanitizer 時(shí)遇到內(nèi)存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    發(fā)表于 06-23 07:16

    如何配置和驗(yàn)證Linux內(nèi)核參數(shù)

    Linux系統(tǒng)運(yùn)維和性能優(yōu)化中,內(nèi)核參數(shù)(sysctl)的配置至關(guān)重要。合理的參數(shù)調(diào)整可以顯著提升網(wǎng)絡(luò)性能、系統(tǒng)穩(wěn)定性及資源利用率。然而,僅僅修改參數(shù)是不夠的,如何驗(yàn)證這些參數(shù)是否生效同樣關(guān)鍵。
    的頭像 發(fā)表于 05-29 17:40 ?785次閱讀

    電腦連接到openmv,但不會(huì)自動(dòng)彈出盤符,請(qǐng)問怎么辦?

    電腦連接到openmv,但不會(huì)自動(dòng)彈出盤符,請(qǐng)問怎么辦?
    發(fā)表于 05-27 06:53

    FPGA的Jtag接口燒了,怎么辦?

    在展開今天的文章前,先來討論一個(gè)問題:FPGA的jtag接口燒了怎么辦?JTAG接口的輸入引腳通常設(shè)計(jì)為高阻抗,這使得它們對(duì)靜電電荷積累非常敏感,由于JTAG接口需要頻繁連接調(diào)試器、下載線纜等外
    的頭像 發(fā)表于 04-27 11:01 ?2119次閱讀
    FPGA的Jtag接口燒了,<b class='flag-5'>怎么辦</b>?

    樹莓派4 性能大比拼:標(biāo)準(zhǔn)Linux與實(shí)時(shí)Linux 4.19內(nèi)核的延遲測(cè)試

    引言本文是對(duì)我之前關(guān)于RaspberryPi3同一主題的帖子的更新。與之前的帖子一樣,我使用的是隨Raspbian鏡像提供的標(biāo)準(zhǔn)內(nèi)核,以及應(yīng)用了RT補(bǔ)丁的相似內(nèi)核版本。對(duì)于實(shí)時(shí)版,我
    的頭像 發(fā)表于 03-25 09:39 ?656次閱讀
    樹莓派4 性能大比拼:標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>與實(shí)時(shí)<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>內(nèi)核</b>的延遲測(cè)試

    內(nèi)存泄漏檢測(cè)工具Sanitizer介紹

    內(nèi)存泄漏,我們經(jīng)常會(huì)遇到,如何檢測(cè)內(nèi)存泄漏,除了我們之前講過的 valgrind,還可以使用 gcc 自帶的工具 sanitizer。
    的頭像 發(fā)表于 03-01 14:52 ?1452次閱讀

    TLC2551不能工作的原因?怎么辦?

    用TL431提供參考電壓,后接LM358做射級(jí)跟隨器來降低輸出阻抗, 同時(shí)給兩個(gè)TLC2551提供參考5V電壓,結(jié)果電壓被拉到3.8V,然后去掉一個(gè)AD,參考電壓可以到5V,但是SDO沒有數(shù)據(jù)輸出,怎么辦啊?
    發(fā)表于 02-12 07:58

    開關(guān)電源漏電怎么辦?開關(guān)電源漏電流標(biāo)準(zhǔn)是什么?

    在現(xiàn)在水電工程中,開關(guān)電源是必不可少的家居用品,開關(guān)電源漏電怎么辦,市面上開關(guān)電源產(chǎn)品還是不少的,功能很多,品牌也不少,所以,選擇的時(shí)候也需要特別注意。好的品牌就會(huì)避免漏電的情況出現(xiàn),開關(guān)電源漏電
    發(fā)表于 01-09 13:59

    騰訊云內(nèi)核團(tuán)隊(duì)修復(fù)Linux關(guān)鍵Bug

    騰訊云操作系統(tǒng)(Tencent OS)內(nèi)核團(tuán)隊(duì)近日在Linux社區(qū)取得了顯著成果。他們提交的兩項(xiàng)改進(jìn)方案,成功解決了自2021年以來一直困擾眾多一線廠商,并在近期讓多個(gè)Linux頂級(jí)
    的頭像 發(fā)表于 12-31 10:58 ?915次閱讀

    Linux系統(tǒng)監(jiān)控報(bào)I/O問題怎么辦

    Linux系統(tǒng)出現(xiàn)了性能問題,一般我們可以通過top、iostat、free、vmstat等命令來查看初步定位問題。其中iostat可以給我們提供豐富的IO狀態(tài)數(shù)據(jù)。 一、查詢命令基本使用 1、命令
    的頭像 發(fā)表于 12-18 09:07 ?968次閱讀