怎樣解決Linux內存泄漏?
這個問題,不屬于我的專長,我轉載一個解答:
內存泄露的查詢有很多方式,可以借助自動化工具(github或相關網絡資源上找),往往出現內存泄露時可以有以下幾種方式來排查:
review代碼。如果代碼量不是很大,并且有交叉review的習慣??梢栽诔跗诮鉀Q掉。
使用內存泄露檢查工具,網上有很多工具,我列舉幾個可以嘗試的:
vagrind 這個工具會幫你檢查出懷疑點,它分好幾個等級來懷疑內存泄露,注意確定那個等級。
還有vagrind 跑進程需要添加符號表,這樣很容易顯示出具體代碼哪個位置出現泄露。
添加符號表導致動態庫太大,無法在板子中復現??梢酝ㄟ^內置的gdb外掛,或者僅僅添加基礎libc庫的符號表(libc.so 應該是這個?)。
mtrace
原理:對malloc 函數進行封裝和記錄改造,使每次調用內存相關的底層函數有依據可查找,。
使用時需要在每個使用過內存函數的地方增加該工具自帶的頭文件。這點會比較麻煩。
當上面的幾種都分析不出來時,需要了解更底層的內存管理機制。
例如:生成的每個線程都會有自己arean內存用于本身線程使用,所以在多線程的情況下會導致arean內存變多,且在達到一定數量后會繼續復用。導致最終內存大范圍的丟失掉。此時需要將arean 每次生成大小要減少。
作者:danny113
鏈接:https://www.jianshu.com/p/fa2d7df5966e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。