先介紹幾個Linux基本概念:
SIZE: 進程使用的地址空間, 如果進程映射了100M的內存, 進程的地址空間將報告為100M內存. 事實上, 這個大小不是一個程序實際使用的內存數.
RSS: "Resident Set Size", 實際駐留"在內存中"的內存數. 不包括已經交換出去的代碼. 舉一個例子: 如果你有一個程序使用了100K內存, 操作系統交換出40K內存, 那麼RSS為60K. RSS還包括了與其它進程共享的內存區域. 這些區域通常用於libc庫等.
SHARE: RSS中與其它進程共享的內存部分大小.
VMSIZE: 一個進程占用的總的地址空間大小. 它包括了沒有映射到內存中的頁面.
Private RSS: 映射到內存中的頁面, 這些頁面僅由進程單獨使用. 這也是我們最關心地方: 進程實際占用的內存數.
如何來查看Private RSS呢? /proc接口中每一個進程目錄下的smaps提供了private rss信息. smaps是在2.6.16內核版本引進來的.
私有駐留內存數(Private RSS):
查看/proc/$pid/smaps
下面我以本站使用的Fedora Core 5為例, 查看進程號1293(vmware-guestd, 本站使用的是一台基於vmware的客戶虛擬機, 微睦獨立主機)使用的Private RSS數.
# cat /proc/1293/smaps
00111000-00112000 rwxp 00111000 00:00 0
Size: 4 kB
Rss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
0050e000-0050f000 rwxp 0050e000 00:00 0
Size: 4 kB
Rss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB