Linux用戶進程內存泄露一種檢測方法


像使用C/C++內存管理器不會幫我們自動回收不再使用的內存,如果忘記釋放不再使用的內存而不能再被重用,就造成了所謂的內存泄露。

         在Linux中,用戶進程在/proc/{pid}/status文件中記錄了該進程的內存使用實時情況。

         * VmSize:

      虛擬內存大小。

      整個進程使用虛擬內存大小,是VmLib, VmExe, VmData, 和 VmStk的總和。

    * VmLck:

      虛擬內存鎖。

      進程當前使用的並且加鎖的虛擬內存總數

    * VmRSS:

      虛擬內存駐留集合大小。

      這是駐留在物理內存的一部分。它沒有交換到硬盤。它包括代碼,數據和棧。

    * VmData:

      虛擬內存數據。

      堆使用的虛擬內存。

    * VmStk:

      虛擬內存棧

      棧使用的虛擬內存

    * VmExe:

      可執行的虛擬內存

      可執行的和靜態鏈接庫所使用的虛擬內存

    * VmLib:

      虛擬內存庫

      動態鏈接庫所使用的虛擬內存

 

         我們可以寫個腳本,把你關注的進程或者所有的進程(ps –ef),的內存使用情況,主要針對VmSize,VmData,VmStk三個方面每隔比如3小時記錄到進程號對應的文件中,每次記錄下一個的時候,做 個比較,如果發現最后一個記錄點比第一個記錄點小無內存泄露,如果大還需要與第二個記錄點的大小(排除系統啟動時的內存增長需要時間穩定下來),如果大的 話就說明有內存泄露。還有記錄點不要太多,比如30個,超過了就刪除除了第一個記錄點外的倒數第二個老的記錄點。檢測出內存泄露,可以打到異常日志中,供 查看。

         我們需要去查看那日志,發現有泄露,會看是什么原因的,至少可以知道是哪個進程的以及是棧還是堆上的,然后再分析代碼…


免責聲明!

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



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