在Linux下面,查看一個進程的內存使用我們可以下面的命令來實現,只需把其中的[pid]換成進程實際的pid。
cat /proc/[pid]/status
為了方便,我們把查找pid和看內存整合成一條命令,后面這將是我們唯一的測試工具。
cat /proc/`ps -ef|grep hello | grep -v grep | awk '{print $2}'`/status | grep -E 'VmSize|VmRSS|VmData|VmStk|VmExe|VmLib'
在這里我們關注VmSize|VmRSS|VmData|VmStk|VmExe|VmLib 這個6個指標,下面有一些簡單的解釋。
VmSize:
虛擬內存大小。
整個進程使用虛擬內存大小,是VmLib, VmExe, VmData, 和 VmStk的總和。
占所有虛擬內存分配(文件映射,共享內存,堆內存,任何內存)的份額,並且幾乎在每次分配新內存時都會增長。幾乎,因為如果在數據段中用新的堆內存分配代替了釋放的舊分配,則不會分配新的虛擬內存。每當釋放虛擬分配時,它都會減少。VmPeak跟蹤的最大值VmSize-只能隨時間增加。
VmLck:
虛擬內存鎖。
進程當前使用的並且加鎖的虛擬內存總數
VmRSS:
虛擬內存駐留集合大小。
這是駐留在物理內存的一部分。它沒有交換到硬盤。它包括代碼,數據和棧。
隨着訪問內存的增加而增加,隨着將頁面調出到交換設備的次數減少。
VmData:
虛擬內存數據。
堆使用的虛擬內存。
隨着使用堆的數據段部分而增長。由於當前的堆分配器會保留釋放的內存,以防將來的分配需要它,它幾乎永遠不會收縮。
VmStk:
虛擬內存棧
棧使用的虛擬內存
VmExe:
可執行的虛擬內存
可執行的和靜態鏈接庫所使用的虛擬內存
VmLib:
虛擬內存庫
動態鏈接庫所使用的虛擬內存
VmPeak:
表示進程所占用最大虛擬內存大小