在
linux
中,使用者程序在
/proc//status
檔案中記錄了該程序的記憶體使用實時情況。 *
vmsize:
虛擬記憶體大小。
整個程序使用虛擬記憶體大小,是
vmlib,vmexe, vmdata,
和 vmstk
的總和。
* vmlck:
虛擬記憶體鎖。
程序當前使用的並且加鎖的虛擬記憶體總數
* vmrss:
虛擬記憶體駐留集合大小。
這是駐留在物理記憶體的一部分。它沒有交換到硬碟。它包括**,資料和棧。 *
vmdata:
虛擬記憶體資料。
堆使用的虛擬記憶體。 *
vmstk:
虛擬記憶體棧
棧使用的虛擬記憶體
* vmexe:
可執行的虛擬記憶體
可執行的和靜態鏈結庫所使用的虛擬記憶體
* vmlib:
虛擬記憶體庫
動態鏈結庫所使用的虛擬記憶體
我們可以寫個指令碼,把你關注的程序或者所有的程序(
ps–ef
),的記憶體使用情況,主要針對
vmsize
,vmdata
,vmstk
三個方面每隔比如
3小時記錄到程序號對應的檔案中,每次記錄下乙個的時候,做個比較,如果發現最後乙個記錄點比第乙個記錄點小無記憶體洩露,如果大還需要與第二個記錄點的大小(排除系統啟動時的記憶體增長需要時間穩定下來),如果大的話就說明有記憶體洩露。還有記錄點不要太多,比如
30個,超過了就刪除除了第乙個記錄點外的倒數第二個老的記錄點。檢測出記憶體洩露,可以打到異常日誌中,供檢視。
我們需要去檢視那日誌,發現有洩露,會看是什麼原因的,至少可以知道是哪個程序的以及是棧還是堆上的,然後再分析**…
一種定位記憶體洩露的方法(Linux)
本文是 一種定位記憶體洩露的方法 solaris 對應的 linux 版本,偵錯程式使用 gdb。主要介紹例項部分。其他請見 一種定位記憶體洩露的方法 solaris 模擬 new失敗的程式 include class abc int i int j void f throw std bad all...
一種定位記憶體洩露的簡易方法
在這篇文章中,將介紹一種定位記憶體洩露的方法。主要原理是通過記憶體洩露時分配的序號以及大小,配合dbgheap.c檔案來定位。在vs開發過程中,開啟crt內部的記憶體洩露檢測函式,當程式退出時,在除錯視窗會輸出未釋放的記憶體資訊,例如下圖所示 從上面截圖可以得知,該次記憶體分配序號為1789698,...
VC 記憶體洩露與檢測的一種方法
本文介紹,當vc 或者mfc程式,出現記憶體洩露時,如何快速定位的方法,這種方法有一定的侷限性,在注意事項中會給出的。當mfc程式出現記憶體洩露時,退出程式時的vs除錯輸出視窗,一般會有如下顯示 上面顯示了在程式的哪個檔案的哪行語句,發生了記憶體洩露,其中 表示 記憶體分配編號 normal blo...