Memory-Usage

頂部的“已用”記憶體大於 /proc/ 中列出的所有程序的 VmSize?

  • July 14, 2011

過去我的理解是,top 對記憶體“使用”的定義是映射到任何程序的物理頁面的數量。然而,最近我看到了一些讓我不以為然的事情。我真的很想有人解釋一下。

鑑於我以前的理解,作為我期望的範例,來自 /proc/ 的總 vmsize 幾乎是頂部“已使用”的三倍(89916452KB,32787948KB)。有些頁面映射到多個程序,有些頁面映射到磁碟(因此根本不應該被 top 計算在內),等等。

$ grep VmSize /proc/*/status | awk '{total += $2} END{print total}'
89916452
$ top
top - 09:39:34 up 5 days,  7:37,  9 users,  load average: 4.89, 4.14, 3.92
Tasks: 242 total,   2 running, 239 sleeping,   0 stopped,   1 zombie
Cpu(s): 69.0%us,  0.5%sy,  0.0%ni, 30.3%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32961916k total, 32787948k used,   173968k free,   248132k buffers
Swap: 16777208k total,  1584300k used, 15192908k free,  7659572k cached

但是,我最近遇到了以下情況。總的 vmsize 幾乎小了 4 倍!怎麼可能是這樣?即使有人爭辯說映射到每個程序的核心頁面不計入 /proc/*/status 中的 VmSize 條目,仍然很難證明它們佔任何相當大的一部分~46GB 正在使用中。

$ grep VmSize /proc/*/status | awk '{total += $2} END{print total}'
8519308
$ top
top - 09:43:55 up 291 days, 15:16,  8 users,  load average: 1.02, 1.08, 1.08
Tasks: 291 total,   1 running, 290 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  49324520k total, 46017056k used,  3307464k free,  5448168k buffers
Swap:  8388600k total,      228k used,  8388372k free, 36486236k cached

請解釋。

top的“已使用”數字包括文件系統記憶體。要獲得實際的程序使用情況,您必須36486236k cached46017056k used. 不確定緩衝區是否計入每個程序status文件,但您可能也必須減去它們。

free命令通過“-/+ 緩衝區/記憶體:”行顯示這一點,當您排除這些時,顯示實際“使用”和“空閒”的內容。

引用自:https://serverfault.com/questions/290369