linux 下 定位內存泄漏 valgrind


      排查項目中遇到的內存泄露問題,用到valgrind工具,記錄下具體的用法以及注意事項,以備后用。

首先要明確的是valgrind 是可靠的:剛開始使用valgrind測試出一些內存泄漏點,通過代碼發現及日志跟

蹤,發現流程上“沒有問題”,一度懷疑valgrind 是不是報告假消息。后來所有報出來的泄漏點均證實確實

存在泄露。 下面介紹下valgrind基本使用方法:

      如果系統沒有安裝valgrind,首先得安裝下,我們測試的系統是Ubuntu16.04,直接 sudo apt-get install 

valgrind  在命令行如下命令:

root@Ubuntu16:~# valgrind --tool=memcheck --leak-check=full  --show-reachable=yes --log-file=./mem.txt ./CGServer

 

      程序運行一段程序后結束程序運行,查看生成的文件(上面的命令指定了日志文件名為mem.txt),示例日志

文件內容 如下圖所示:

                 

                                                                    圖1. 示例日志內容

 

        需要注意的是提示still reachable的地方 也有可能是泄露點。still reachable 原意是仍然可以被釋放,如果是

庫初始化處提示still reachable 沒有問題,因為只有程序不退出,不能被釋放。如果被反復調用的接口處也提示

still reachable 基本上都屬於內存泄露,需要解決。

     另外調用malloc分配的內存 free后內存不一定會立即交還操作系統,glibc有自己的內存管理機制。默認分配超

過128K的內存,free后會內存會立即交還操作系統(這個閾值可通過mallopt接口設置M_MMAP_THRESHOLD進

行修改)。小於128K先緩存起來,適當的時候釋放。如果希望盡快釋放內存可執行mall_trim(0)(可單獨開啟一個線

程定時執行該方法,該方法可釋放本進程內其他線程free后的內存(交還操作系統))。 相比之下Windows系統下

內存釋放沒有這個問題調用free接口后一定是及時釋放內存的。

     linux下 查看程序占用的內存可通過 top -p 進程Pid  命令進行查看,整體上該命令輸出的進程內存信息是准確的,

通過該命令查看進程內存如果進程占用內存一直增加 一定是有問題的。

   

如需交流可加QQ群766718184,1038388075 或者QQ3501870,

視頻下載地址:http://www.chungen90.com/?news_33/

 Demo下載地址: http://www.chungen90.com/?news_34

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM