[發(fā)明專利]一種Linux內(nèi)核內(nèi)存泄漏的檢測方法在審
| 申請?zhí)枺?/td> | 202211610513.5 | 申請日: | 2022-12-12 |
| 公開(公告)號: | CN116149963A | 公開(公告)日: | 2023-05-23 |
| 發(fā)明(設(shè)計)人: | 劉良明;賴冬梅;張凌云 | 申請(專利權(quán))人: | 四川天邑康和通信股份有限公司 |
| 主分類號: | G06F11/34 | 分類號: | G06F11/34;G06F9/50;G06F16/22 |
| 代理公司: | 成都時譽知識產(chǎn)權(quán)代理事務(wù)所(普通合伙) 51250 | 代理人: | 宋鵬程 |
| 地址: | 611300 四川省成*** | 國省代碼: | 四川;51 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 linux 內(nèi)核 內(nèi)存 泄漏 檢測 方法 | ||
本發(fā)明提供了一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,涉及計算機(jī)內(nèi)存技術(shù)領(lǐng)域。本發(fā)明提供的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法整個過程大致可分為三塊:分配內(nèi)存過程,釋放內(nèi)存過程,用戶查看內(nèi)存泄漏情況;該方法通過統(tǒng)計內(nèi)存分配次數(shù)和內(nèi)存釋放次數(shù),判斷內(nèi)存塊是否可能存在內(nèi)存泄漏;若內(nèi)存分配次數(shù)減去內(nèi)存釋放次數(shù),并超出時間閾值,則判定為內(nèi)存泄漏,并打印對應(yīng)的內(nèi)存分配信息;該方法計算量小,占用資源少,并且能KMEMLEAK技術(shù)無法檢測老化回收內(nèi)存機(jī)制導(dǎo)致的內(nèi)存泄漏情況;因此,本發(fā)明相較于現(xiàn)有方案具備實用和推廣價值。
技術(shù)領(lǐng)域
本發(fā)明涉及計算機(jī)內(nèi)存技術(shù)領(lǐng)域,尤其涉及一種Linux內(nèi)核內(nèi)存泄漏的檢測方法。
背景技術(shù)
內(nèi)存泄漏是指程序分配出去的內(nèi)存在使用完之后沒有釋放,造成資源浪費,導(dǎo)致系統(tǒng)可用的內(nèi)存越來越少。內(nèi)存泄漏是由于程序設(shè)計的缺陷導(dǎo)致的,內(nèi)存泄漏可能發(fā)生在系統(tǒng)內(nèi)核中,也可能發(fā)生在應(yīng)用程序中。程序設(shè)計者需要檢測出內(nèi)存泄漏的點,以滿足系統(tǒng)長期運行的穩(wěn)定性。
現(xiàn)有的內(nèi)核內(nèi)存泄漏檢測手段為Linux自帶的KMEMLEAK技術(shù)。它的原理為內(nèi)存分配時記錄分配內(nèi)存的函數(shù)調(diào)用棧、時間、大小和地址在紅黑樹中,當(dāng)內(nèi)存釋放時在該紅黑樹中刪除該條記錄,每隔10分鐘對內(nèi)存做一次掃描,如果紅黑樹中某條記錄的內(nèi)存地址在內(nèi)存中沒有找到,那么判定為內(nèi)存泄漏,然后打印出相關(guān)的函數(shù)調(diào)用棧,分配時間,分配大小等信息。
KMEMLEAK技術(shù)的缺陷為只有當(dāng)內(nèi)存中不存在紅黑樹中的地址時,才能判定為內(nèi)存泄漏,但實際問題中還有另外一種情況:分配的地址在內(nèi)存中一直存在,但是程序由于缺乏老化回收內(nèi)存的機(jī)制,導(dǎo)致內(nèi)存不被釋放,導(dǎo)致系統(tǒng)使用的內(nèi)存越來越多。這種情況下KMEMLEAK無法檢測到內(nèi)存泄漏。
因此,有必要提供一種Linux內(nèi)核內(nèi)存泄漏的檢測方法來解決上述技術(shù)問題。
發(fā)明內(nèi)容
為解決上述之一技術(shù)問題,本發(fā)明提供的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,部署在Linux內(nèi)核上,包括分配內(nèi)存過程、釋放內(nèi)存過程和內(nèi)存泄漏情況;其中,
分配內(nèi)存過程:用于設(shè)置需要跟蹤的內(nèi)存塊,并進(jìn)行內(nèi)存分配次數(shù);
釋放內(nèi)存過程:用于監(jiān)測需要跟蹤的內(nèi)存塊,并進(jìn)行內(nèi)存釋放次數(shù);
內(nèi)存泄漏情況:根據(jù)內(nèi)存分配次數(shù)和內(nèi)存釋放次數(shù),判斷是否存在內(nèi)存泄漏。
作為更進(jìn)一步的解決方案,分配內(nèi)存過程通過如下步驟進(jìn)行:
步驟A1:在Linux內(nèi)核的內(nèi)存分配位置處和內(nèi)存釋放位置處添加鉤子點,鉤子點用于放置內(nèi)存記錄函數(shù);
步驟A2:設(shè)置需要進(jìn)行跟蹤的內(nèi)存塊;
若是需要進(jìn)行跟蹤的內(nèi)存塊,則進(jìn)行步驟A3;
若不是需要進(jìn)行跟蹤的內(nèi)存塊,則進(jìn)行步驟A6;
步驟A3:記錄內(nèi)存分配信息;其中,內(nèi)存分配信息用于描述各內(nèi)存塊,描述包括內(nèi)存塊對應(yīng)的調(diào)用棧;
步驟A4:檢查Linux內(nèi)核的哈希表中是否存在內(nèi)存塊對應(yīng)的調(diào)用棧;
若存在:則將對應(yīng)調(diào)用棧的內(nèi)存分配次數(shù)加1;
若不存在:則將對應(yīng)調(diào)用棧保存至哈希表中;
步驟A5:將內(nèi)存分配信息添加至鏈表中;
步驟A6:完成一次分配內(nèi)存過程,返回結(jié)果。
作為更進(jìn)一步的解決方案,內(nèi)存分配信息中還保存有內(nèi)存塊時間、內(nèi)存塊地址和內(nèi)存塊大小。
作為更進(jìn)一步的解決方案,釋放內(nèi)存過程通過如下步驟進(jìn)行:
步驟B1:判斷內(nèi)存塊是否為需要進(jìn)行跟蹤的內(nèi)存塊;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于四川天邑康和通信股份有限公司,未經(jīng)四川天邑康和通信股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202211610513.5/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





