Linux
Ubuntu Linux:程序交換記憶體和記憶體使用情況
我的 Ubuntu 消耗的記憶體比任務管理器顯示的要多:
sudo ps -e --format rss | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}' 2750.29 free -m total used free shared buffers cached Mem: 3860 2765 1094 0 3 300 -/+ buffers/cache: 2461 1398 Swap: 2729 2374 354
那很奇怪。有人可以解釋這種區別嗎?
但更重要的是:我想知道一個程序真正使用了多少記憶體。我不想知道虛擬記憶體大小,而是想知道程序的常駐記憶體加上交換。
我還嘗試輸出“ps”的格式參數“sz”,但總和很高(16000 MB)(參數“大小”給出了 36700 MB)。還有其他選擇嗎?
我真的很想用它來確定哪些程序/程序正在消耗大量記憶體(和交換),殺死它們,因為記憶體很有價值:-) 這真的沒有意義,所以我在這裡問。
/proc/meminfo 的輸出:
MemTotal: 3952812 kB MemFree: 1119192 kB Buffers: 2676 kB Cached: 290068 kB SwapCached: 160980 kB Active: 1805396 kB Inactive: 731680 kB Active(anon): 1745820 kB Inactive(anon): 689184 kB Active(file): 59576 kB Inactive(file): 42496 kB Unevictable: 148 kB Mlocked: 148 kB SwapTotal: 2795272 kB SwapFree: 390900 kB Dirty: 1984 kB Writeback: 0 kB AnonPages: 2085472 kB Mapped: 67432 kB Shmem: 190676 kB Slab: 88012 kB SReclaimable: 42704 kB SUnreclaim: 45308 kB KernelStack: 5496 kB PageTables: 87860 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 4771676 kB Committed_AS: 9522364 kB VmallocTotal: 34359738367 kB VmallocUsed: 374404 kB VmallocChunk: 34359330144 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 61440 kB DirectMap2M: 4030464 kB
linux 虛擬記憶體系統並不是那麼簡單。您不能只是將所有 RSS 欄位相加並
used
獲得free
. 這有很多原因,但我會談到幾個最大的原因。
- 當一個程序分叉時,父程序和子程序都將顯示相同的 RSS。但是 linux 採用寫時複製,因此兩個程序實際上都在使用相同的記憶體。只有當其中一個程序修改了記憶體時,它才會真正被複製。
這將導致
free
數字小於top
RSS 總和。
- RSS 值不包括共享記憶體。因為共享記憶體不屬於任何一個程序,
top
所以不包含在 RSS 中。這將導致
free
數字大於top
RSS 總和。
我認為你最好相信“free”的輸出,就你的總記憶體使用而言,相信“ps”來大致了解單個程序正在使用多少記憶體。
僅僅因為“ps”RSS 值的總和不等於“free”並不能阻止您按 RSS 對程序進行排序並評估最大的程序以進行終止。
話雖如此,如果您的所有努力只是為了確保機器可以休眠,那麼創建更多交換(如果需要,以磁碟上文件的形式)可能是更容易採取的方法。