[發(fā)明專(zhuān)利]一種基于Linux內(nèi)核內(nèi)存泄露的檢測(cè)方法有效
| 申請(qǐng)?zhí)枺?/td> | 201711085297.6 | 申請(qǐng)日: | 2017-11-07 |
| 公開(kāi)(公告)號(hào): | CN107783908B | 公開(kāi)(公告)日: | 2020-12-25 |
| 發(fā)明(設(shè)計(jì))人: | 曾濤 | 申請(qǐng)(專(zhuān)利權(quán))人: | 晶晨半導(dǎo)體(上海)股份有限公司 |
| 主分類(lèi)號(hào): | G06F11/36 | 分類(lèi)號(hào): | G06F11/36;G06F9/50 |
| 代理公司: | 上海申新律師事務(wù)所 31272 | 代理人: | 俞滌炯 |
| 地址: | 201203 上海市浦東新區(qū)張江*** | 國(guó)省代碼: | 上海;31 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 linux 內(nèi)核 內(nèi)存 泄露 檢測(cè) 方法 | ||
1.一種基于Linux內(nèi)核內(nèi)存泄露的檢測(cè)方法,應(yīng)用于內(nèi)存泄露的檢測(cè),所述內(nèi)存包括多個(gè)內(nèi)存頁(yè),其特征在于,創(chuàng)建一節(jié)點(diǎn),通過(guò)所述節(jié)點(diǎn)統(tǒng)計(jì)每個(gè)所述內(nèi)存頁(yè)被調(diào)用的分配函數(shù)的返回地址,以及每個(gè)所述分配函數(shù)分配的所述內(nèi)存頁(yè)的數(shù)量;
包括以下步驟:
步驟S1、讀取所述節(jié)點(diǎn),獲取每一個(gè)所述內(nèi)存頁(yè)所述分配函數(shù)的返回地址,以及所述分配分配函數(shù)對(duì)應(yīng)分配的所述內(nèi)存頁(yè)的數(shù)量;
步驟S2、于讀取完成之后,釋放所述節(jié)點(diǎn)統(tǒng)計(jì)的所述分配函數(shù)的返回地址以及所述分配函數(shù)對(duì)應(yīng)分配的所述內(nèi)存頁(yè)的數(shù)量;
步驟S3、再次讀取所述節(jié)點(diǎn),獲取每一個(gè)所述分配函數(shù)的返回地址,以及所述分配函數(shù)對(duì)應(yīng)分配的所述內(nèi)存頁(yè)的數(shù)量;
步驟S4、獲取所述步驟S3中與所述步驟S1中同一所述分配函數(shù)各自所對(duì)應(yīng)分配的所述內(nèi)存頁(yè)的數(shù)量,并進(jìn)行比較取得差值;
在所述差值為正值且所述差值一直增大時(shí),判斷所述分配函數(shù)對(duì)應(yīng)分配的內(nèi)存頁(yè)存在泄漏;
每個(gè)所述內(nèi)存頁(yè)包括一數(shù)據(jù)結(jié)構(gòu),于所述數(shù)據(jù)結(jié)構(gòu)中增加一地址返回標(biāo)識(shí),一分配階數(shù)標(biāo)志以及一內(nèi)存類(lèi)型的分配標(biāo)識(shí);
所述地址返回標(biāo)識(shí)用以記錄內(nèi)存分配時(shí)調(diào)用函數(shù)的地址;
所述分配標(biāo)識(shí)用以表示所述內(nèi)存頁(yè)被分配的內(nèi)存類(lèi)型;
在每次內(nèi)存分配時(shí)保存調(diào)用函數(shù)信息時(shí),通過(guò)內(nèi)核棧檢查函數(shù)調(diào)用鏈,所述調(diào)用鏈中依次保存有公共分配函數(shù)以及所述分配函數(shù)所對(duì)應(yīng)的返回地址、分配參數(shù)以及分配階數(shù);
獲取所述調(diào)用鏈中頂層的所述分配函數(shù)所對(duì)應(yīng)的所述返回地址、所述分配參數(shù)以及所述分配階數(shù);
并將所述返回地址保存至所述地址返回標(biāo)識(shí)中以及將所述分配參數(shù)以及所述分配階數(shù)保存至所述內(nèi)存頁(yè)的數(shù)據(jù)結(jié)構(gòu)中。
2.根據(jù)權(quán)利要求1所述的檢測(cè)方法,其特征在于,所述內(nèi)存中包括多個(gè)內(nèi)存區(qū),每個(gè)所述內(nèi)存區(qū)由多個(gè)所述內(nèi)存頁(yè)形成,獲取每個(gè)所述內(nèi)存頁(yè)的所述分配函數(shù)的方法,包括以下步驟:
步驟A1、按序讀取每個(gè)所述內(nèi)存區(qū);
步驟A2、讀取每個(gè)所述內(nèi)存區(qū)中每個(gè)所述內(nèi)存頁(yè)所對(duì)應(yīng)的所述數(shù)據(jù)結(jié)構(gòu),以獲取每個(gè)所述內(nèi)存頁(yè)對(duì)應(yīng)的所述分配函數(shù)對(duì)應(yīng)的返回地址;
步驟A3、在所有所述內(nèi)存區(qū)以及每個(gè)內(nèi)存區(qū)中的所述內(nèi)存頁(yè)讀取完成后,將獲取的所有所述分配函數(shù)對(duì)應(yīng)的返回地址,以及每個(gè)所述分配函數(shù)分配的所述內(nèi)存頁(yè)的數(shù)量形成一臨時(shí)數(shù)組。
3.根據(jù)權(quán)利要求2所述的檢測(cè)方法,其特征在于,提供一打印模塊,通過(guò)所述打印模塊將所述臨時(shí)數(shù)組中保存的每個(gè)所述分配函數(shù)、所述分配函數(shù)對(duì)應(yīng)的返回地址以及所述分配函數(shù)對(duì)應(yīng)分配的所述內(nèi)存頁(yè)的數(shù)量打印顯示于一界面中。
4.根據(jù)權(quán)利要求2所述的檢測(cè)方法,其特征在于,提供一臨時(shí)記錄數(shù)組,用以保存讀取的所述內(nèi)存頁(yè)對(duì)應(yīng)的所述分配函數(shù)的返回地址;
在所述步驟A2中,還包括以下步驟:
步驟A21、判斷所有的內(nèi)存頁(yè)是否讀取完成;
若是,表示所有的所述內(nèi)存頁(yè)讀取完成,退出;
步驟A22、讀取下一所述內(nèi)存頁(yè)時(shí)將讀取的分配函數(shù)對(duì)應(yīng)的返回地址與所述臨時(shí)記錄數(shù)組中的返回地址進(jìn)行匹配;
步驟A23、若匹配相同,則對(duì)當(dāng)前的所述分配函數(shù)分配的內(nèi)存頁(yè)的數(shù)量加1,并返回步驟A21;
步驟A24、若匹配不同,則將所述內(nèi)存頁(yè)對(duì)應(yīng)的所述分配函數(shù)的返回地址保存于所述臨時(shí)記錄數(shù)組中,并返回步驟A21。
5.根據(jù)權(quán)利要求1所述的檢測(cè)方法,其特征在于,當(dāng)所述內(nèi)存頁(yè)被釋放時(shí),將保存在所述地址返回標(biāo)識(shí)中的返回地址以及保存在所述數(shù)據(jù)結(jié)構(gòu)中的所述分配參數(shù)以及所述分配階數(shù)清空。
6.根據(jù)權(quán)利要求1所述的檢測(cè)方法,其特征在于,提供一宏配置模塊用以配置形成所述地址返回標(biāo)識(shí)。
該專(zhuān)利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專(zhuān)利權(quán)人授權(quán)。該專(zhuān)利全部權(quán)利屬于晶晨半導(dǎo)體(上海)股份有限公司,未經(jīng)晶晨半導(dǎo)體(上海)股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專(zhuān)利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201711085297.6/1.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專(zhuān)利網(wǎng)。
- 同類(lèi)專(zhuān)利
- 專(zhuān)利分類(lèi)
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F11-00 錯(cuò)誤檢測(cè);錯(cuò)誤校正;監(jiān)控
G06F11-07 .響應(yīng)錯(cuò)誤的產(chǎn)生,例如,容錯(cuò)
G06F11-22 .在準(zhǔn)備運(yùn)算或者在空閑時(shí)間期間內(nèi),通過(guò)測(cè)試作故障硬件的檢測(cè)或定位
G06F11-28 .借助于檢驗(yàn)標(biāo)準(zhǔn)程序或通過(guò)處理作錯(cuò)誤檢測(cè)、錯(cuò)誤校正或監(jiān)控
G06F11-30 .監(jiān)控
G06F11-36 .通過(guò)軟件的測(cè)試或調(diào)試防止錯(cuò)誤
- LINUX內(nèi)核動(dòng)態(tài)加載方法
- 一種Linux嵌入式系統(tǒng)的安全啟動(dòng)方法
- 一種加快嵌入式Linux系統(tǒng)啟動(dòng)的方法
- Linux文件系統(tǒng)的多點(diǎn)備份和實(shí)時(shí)保護(hù)方法
- 基于硬件的Linux軟件開(kāi)發(fā)系統(tǒng)及其構(gòu)建方法
- 將VxWorks任務(wù)移植到Linux的方法及裝置
- 一種Linux內(nèi)核接管socket鏈接的方法和裝置
- 一種Linux系統(tǒng)的備份和還原方法
- 一種基于Linux系統(tǒng)盤(pán)的寫(xiě)過(guò)濾系統(tǒng)和方法
- 一種基于Linux系統(tǒng)盤(pán)的熱插拔方法和系統(tǒng)





