Linux

Ubuntu Linux:程序交換記憶體和記憶體使用情況

  • February 22, 2021

我的 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數字小於topRSS 總和。

  • RSS 值不包括共享記憶體。因為共享記憶體不屬於任何一個程序,top所以不包含在 RSS 中。

這將導致free數字大於topRSS 總和。

我認為你最好相信“free”的輸出,就你的總記憶體使用而言,相信“ps”來大致了解單個程序正在使用多少記憶體。

僅僅因為“ps”RSS 值的總和不等於“free”並不能阻止您按 RSS 對程序進行排序並評估最大的程序以進行終止。

話雖如此,如果您的所有努力只是為了確保機器可以休眠,那麼創建更多交換(如果需要,以磁碟上文件的形式)可能是更容易採取的方法。

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