Memory-Usage
頂部的“已用”記憶體大於 /proc/ 中列出的所有程序的 VmSize?
過去我的理解是,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 cached
從46017056k used
. 不確定緩衝區是否計入每個程序status
文件,但您可能也必須減去它們。該
free
命令通過“-/+ 緩衝區/記憶體:”行顯示這一點,當您排除這些時,顯示實際“使用”和“空閒”的內容。