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

作者:夏斯華

 

 

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

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

         * VmSize:

      虛擬內存大小。

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

* VmLck:

      虛擬內存鎖。

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

* VmRSS:

      虛擬內存駐留集合大小。

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

* VmData:

      虛擬內存數據。

      使用的虛擬內存。

* VmStk:

      虛擬內存棧

      使用的虛擬內存

* VmExe:

      可執行的虛擬內存

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

* VmLib:

      虛擬內存庫

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

 

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章