[發(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 |
| 代理公司: | 成都時譽(yù)知識產(chǎn)權(quán)代理事務(wù)所(普通合伙) 51250 | 代理人: | 宋鵬程 |
| 地址: | 611300 四川省成*** | 國省代碼: | 四川;51 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 linux 內(nèi)核 內(nèi)存 泄漏 檢測 方法 | ||
1.一種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)存泄漏。
2.根據(jù)權(quán)利要求1所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,分配內(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é)果。
3.根據(jù)權(quán)利要求2所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,內(nèi)存分配信息中還保存有內(nèi)存塊時間、內(nèi)存塊地址和內(nèi)存塊大小。
4.根據(jù)權(quán)利要求3所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,釋放內(nèi)存過程通過如下步驟進(jìn)行:
步驟B1:判斷內(nèi)存塊是否為需要進(jìn)行跟蹤的內(nèi)存塊;
若是需要進(jìn)行跟蹤的內(nèi)存塊,則進(jìn)行步驟B2;
若不是需要進(jìn)行跟蹤的內(nèi)存塊,則進(jìn)行步驟B5;
步驟B2:鏈表中查找對應(yīng)的內(nèi)存塊地址;
步驟B3:將對應(yīng)的調(diào)用棧內(nèi)存釋放次數(shù)加1;
步驟B4:從鏈表中刪除內(nèi)存分配信息;
步驟B5:完成一次釋放內(nèi)存過程,返回結(jié)果。
5.根據(jù)權(quán)利要求4所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,通過調(diào)用內(nèi)存未釋放次數(shù),來判斷是否存在內(nèi)存泄漏;內(nèi)存未釋放次數(shù)等于內(nèi)存分配次數(shù)減去內(nèi)存釋放次數(shù)。
6.根據(jù)權(quán)利要求5所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,用戶通過如下步驟對內(nèi)存泄漏情況進(jìn)行查看:
步驟C1:用戶設(shè)置內(nèi)存泄漏次數(shù)的判斷閾值,設(shè)置內(nèi)存老化的時間閾值;
步驟C2:遍歷哈希表;
步驟C3:獲取內(nèi)存塊的內(nèi)存分配次數(shù)和內(nèi)存釋放次數(shù),并計算內(nèi)存未釋放次數(shù);
步驟C4:將內(nèi)存未釋放次數(shù)和判斷閾值進(jìn)行比較:
若內(nèi)存未釋放次數(shù)大于判斷閾值,則進(jìn)行步驟C5;
若內(nèi)存未釋放次數(shù)未大于判斷閾值,則內(nèi)存泄漏情況:內(nèi)存未泄漏,并進(jìn)行步驟C7;
步驟C5:獲取內(nèi)存塊的內(nèi)存塊時間,并與時間閾值進(jìn)行比較:
若內(nèi)存塊時間大于時間閾值,則內(nèi)存泄漏情況:內(nèi)存泄漏,并進(jìn)行步驟C6;
若內(nèi)存塊時間大于時間閾值,則內(nèi)存泄漏情況:內(nèi)存未泄漏,并進(jìn)行步驟C7;
步驟C6:打印內(nèi)存分配信息,包括內(nèi)存塊時間、內(nèi)存塊大小和調(diào)用棧;
步驟C7:結(jié)束哈希表遍歷,向用戶返回內(nèi)存泄漏情況,完成一次內(nèi)存泄漏情況查看。
7.根據(jù)權(quán)利要求1至權(quán)利要求6任一項所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,用戶還能查看特定調(diào)用棧的內(nèi)存分配次數(shù)和內(nèi)存釋放次數(shù)。
8.根據(jù)權(quán)利要求1至權(quán)利要求6任一項所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,內(nèi)存記錄函數(shù)的設(shè)置點位包括slab_alloc和__cache_free。
9.根據(jù)權(quán)利要求1至權(quán)利要求6任一項所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,內(nèi)存分配信息還包括PID號。
10.根據(jù)權(quán)利要求1至權(quán)利要求6任一項所述的一種Linux內(nèi)核內(nèi)存泄漏的檢測方法,其特征在于,內(nèi)存塊包括通用內(nèi)存塊和特色內(nèi)存塊;
通用內(nèi)存塊包括:kmalloc-256和kmalloc-512;
特殊內(nèi)存塊包括:wifi0_rxbuf,sock_inode_cache。
該專利技術(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/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





