Linux

高記憶體使用但沒有程序正在使用它

  • February 11, 2016

free -m在 Hyper-V 上執行的 debian VM 上執行:

            total       used       free     shared    buffers     cached
Mem:         10017       9475        541        147         34        909
-/+ buffers/cache:       8531       1485
Swap:         1905          0       1905

所以在我的 10GB 記憶體中,有 8.5GB 正在使用中,只有 1500MB 是可用的(不包括記憶體)。

但我很難找到正在使用記憶體的東西。的輸出ps aux | awk '{sum+=$6} END {print sum / 1024}',應該加起來 RSS 使用率是:

1005.2

換句話說,我的程序只使用 1GB 記憶體,但整個系統(不包括記憶體)使用 8.5GB。

什麼可以使用其他 7.5GB?

ps:我有另一台具有類似配置的伺服器,顯示已用記憶體為 1200(免費記憶體 = 8.8GB),ps 中的 RSS 使用總和為 900,這更接近我的預期……


編輯

cat /proc/meminfo在機器 1 上(記憶體不足):

MemTotal:       10257656 kB
MemFree:          395840 kB
MemAvailable:    1428508 kB
Buffers:          162640 kB
Cached:          1173040 kB
SwapCached:          176 kB
Active:          1810200 kB
Inactive:         476668 kB
Active(anon):     942816 kB
Inactive(anon):   176184 kB
Active(file):     867384 kB
Inactive(file):   300484 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1951740 kB
SwapFree:        1951528 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        951016 kB
Mapped:           224388 kB
Shmem:            167820 kB
Slab:              86464 kB
SReclaimable:      67488 kB
SUnreclaim:        18976 kB
KernelStack:        6736 kB
PageTables:        13728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7080568 kB
Committed_AS:    1893156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62284 kB
VmallocChunk:   34359672552 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67520 kB
DirectMap2M:    10418176 kB

cat /proc/meminfo在機器 2 上(正常記憶體使用):

MemTotal:       12326128 kB
MemFree:         8895188 kB
MemAvailable:   10947592 kB
Buffers:          191548 kB
Cached:          2188088 kB
SwapCached:            0 kB
Active:          2890128 kB
Inactive:         350360 kB
Active(anon):    1018116 kB
Inactive(anon):    33320 kB
Active(file):    1872012 kB
Inactive(file):   317040 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3442684 kB
SwapFree:        3442684 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        860880 kB
Mapped:           204680 kB
Shmem:            190588 kB
Slab:              86812 kB
SReclaimable:      64556 kB
SUnreclaim:        22256 kB
KernelStack:       10576 kB
PageTables:        11924 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9605748 kB
Committed_AS:    1753476 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62708 kB
VmallocChunk:   34359671804 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:    12519424 kB

我了解您使用的是 Hyper-V,但概念相似。也許這會讓你走上正確的軌道。

您的問題可能是由於虛擬記憶體膨脹造成的,這是虛擬機管理程序用來優化記憶體的一種技術。有關說明,請參見此連結

我在 vSphere 中的虛擬機上觀察到了完全相同的症狀。一台沒有任何執行的 4G 機器會報告記憶體使用了 30M,但在“-/+ 緩衝區”行中“已使用”超過 3G。

這是 VMWare 的統計命令的範例輸出。這顯示了我的“已使用”數量與 3G 的接近程度:

vmware-toolbox-cmd stat balloon
3264 MB

就我而言,很明顯,我的氣球驅動器使用的是~3G

我不確定 Hyper-V 中的類似命令是什麼來獲取你的氣球統計資訊,但我相信你會得到類似的結果

引用自:https://unix.stackexchange.com/questions/259659