Високе використання пам'яті, але жоден процес не використовує її


17

Я запускаю free -mна VM debian, що працює на Hyper-V:

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

Таким чином, з моїх 10 Гб пам’яті використовується 8,5 ГБ, і лише 1500 МБ безкоштовно (без кешу).

Але я намагаюся знайти те, що використовує пам'ять. Вихід ps aux | awk '{sum+=$6} END {print sum / 1024}', який повинен доповнити використання RSS:

1005.2

Іншими словами, мої процеси використовують лише 1 ГБ пам'яті, але система в цілому (крім кешу) використовує 8,5 ГБ.

Що може використовувати інші 7,5 ГБ?

ps: У мене є ще один сервер із подібною конфігурацією, який показує використаний mem 1200 (вільний mem = 8,8GB), а сума використання RSS у ps становить 900, що ближче до того, що я б очікував ...


EDIT

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

Відповіді:


15

Я розумію, ви використовуєте Hyper-V, але поняття схожі. Можливо, це поставить вас на правильний шлях.

Ваша проблема, ймовірно, пов’язана з аеростатом віртуальної пам’яті, технікою, яку використовує гіпервізор для оптимізації пам’яті. Дивіться це посилання для опису

Я спостерігав ваші точно такі ж симптоми з моїми віртуальними машинами в vSphere. Машина 4G, на якій нічого не працює, повідомила б про керування 30M, використовуваним кешем, але понад 3G "використовується" у рядку "- / + буфери".

Ось зразок виводу з команди статистики VMWare. Це показує, наскільки близько 3G залучається до моєї "використаної" кількості:

vmware-toolbox-cmd stat balloon
3264 MB

У моєму випадку, явно, мій драйвер на повітряній кулі використовував ~ 3G

Я не впевнений, що подібна команда в Hyper-V полягає в отриманні статистики на повітряній кулі, але я впевнений, що ви отримаєте подібні результати


Спасибі - ви напевно на чомусь. lsmod | grep hv_ показує hv_balloon на машині з низькою пам’яттю, але не на іншій, тому модуль повітряної кулі завантажується на одній, а не на іншій. І поведінка дуже схожа на цей опис .
assylias

Не впевнений, який еквівалент vmware-toolbox-cmdє на Hyper V, хоча.
assylias

@assylias Я знаю, вибачте. Я подивився на себе, коли писав цю відповідь, і підійшов порожнім. Однак якщо ви пишете програму, яка швидко виділяє багато пам’яті, це може переконати гіпервізора в тому, що вашій машині управління потрібні ресурси. Схожий на тест вилучення кеш-диска, але інша причина.
Мет

Ви можете вимкнути функцію динамічного оперативної пам’яті в Hyper-V для вирішення цієї проблеми.
Ashish Negi

Я не бачу рішення тут, боюся.
Джеймі Хатбер

1

/server/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free

Коротка відповідь: ядро ​​використовує буфери / кеш-пам'ять для різних завдань, таких як файли кешування. Ця пам'ять доступна програмам, якщо вона потрібна, тому ви правильно сказали, що у вас є 944 МБ.


За цим посиланням, 944MB є об'єм кеш - пам'яті
assylias

2
Ні, 944 Мб - це об'єм оперативної пам’яті, який фактично використовується програмами та не доступний для інших програм. Прочитайте цей пост: "Linux (як і більшість сучасних ОС) завжди намагатиметься використовувати безкоштовну оперативну пам'ять для кешування матеріалів, тому Mem: free майже завжди буде дуже низьким. Тому рядок - / + буфери / кеш: відображається, тому що він показує скільки пам'яті вільної при ігноруванні кеш-пам'яті, кеші автоматично звільнятимуться, якщо пам'ять стане дефіцитною, тому вони насправді не мають значення ".
vik

так, і - / + буфери / кеш показує 1,5 Гб вільної пам'яті ...
assylias

Будь ласка, зрозумійте, що 1485 безкоштовно у кеш-буфері - / + НЕ є обсягом пам'яті, доступною для програм у системі. Обсяг пам’яті, фактично доступної для ваших програм, становить: (10017 - (9475 - 8531)) = 9073. Це має сенс?
vik

Я думаю, ви помиляєтеся: другий рядок виключає кеш-пам'ять та буфери і є фактичним використанням пам'яті програм (і саме так говорить ваше посилання ...).
assylias
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.