Высокое использование памяти, но ни один процесс не использует ее

17

Я работаю free -mна виртуальной машине 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,8 ГБ) и сумма использования RSS в PS составляет 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
assylias
источник

Ответы:

15

Я понимаю, что вы используете Hyper-V, но концепции похожи. Может быть, это установит вас на правильном пути.

Вероятно, ваша проблема связана с раздутием виртуальной памяти, методом, который гипервизор использует для оптимизации памяти. Смотрите эту ссылку для описания

Я наблюдал ваши точно такие же симптомы с моими виртуальными машинами в vSphere. Машина 4G, на которой ничего не запущено, выдаст 30 МБ, используемой кешем, но через 3G «используется» в строке «- / + buffers».

Вот пример вывода из команды статистики VMWare. Это показывает, как близко к 3G привязывается к моей «использованной» сумме:

vmware-toolbox-cmd stat balloon
3264 MB

В моем случае, довольно очевидно, мой водитель воздушного шара использовал ~ 3G

Я не уверен, что подобная команда в Hyper-V предназначена для получения статистики, но я уверен, что вы получите аналогичные результаты.

Matt
источник
Спасибо - вы определенно на что-то. lsmod | grep hv_ показывает hv_balloon на машине с малым объемом памяти, но не на другом, поэтому модуль воздушного шара загружается на одном, а не на другом. И поведение очень похоже на это описание .
assylias
Не уверен, что эквивалент vmware-toolbox-cmdна Hyper V, хотя.
assylias
@assylias Я знаю, извините. Я посмотрел сам во время написания этого ответа и вышел пустым. Однако, если вы напишите программу, которая быстро выделяет много памяти, это может убедить гипервизор в том, что вашей виртуальной машине нужны ресурсы. Похож на тестовый сценарий вытеснения дискового кэша, но другой основной причиной.
Мэтт
Вы можете отключить функцию динамической памяти в Hyper-V, чтобы решить эту проблему.
Ашиш Неги
Боюсь, я не вижу здесь решения.
Джейми Хатбер,
1

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

Краткий ответ: ядро ​​использует буферы / кэш-память для различных задач, таких как кеширование файлов. Эта память доступна приложениям, если она необходима, поэтому вы правы, говоря, что вы использовали 944 МБ.

вики
источник
По этой ссылке 944MB - это объем кеша
assylias
2
Нет, 944 МБ - это объем оперативной памяти, фактически используемой приложениями и недоступной для других приложений. Перечитайте этот пост: «Linux (как и большинство современных ОС) всегда будет пытаться использовать свободную оперативную память для кэширования, поэтому Mem: free почти всегда будет очень низкой. Поэтому отображается строка - / + buffers / cache: потому что она показывает сколько памяти свободно при игнорировании кэшей; кэши будут освобождаться автоматически, если памяти становится недостаточно, поэтому они не имеют большого значения ».
Вик
да и - / + buffers / cache показывает 1,5 ГБ свободной памяти ...
assylias
Пожалуйста, поймите, что 1485 свободных в кеше буферов - / + НЕ являются объемом памяти, доступной для приложений в системе. Объем памяти, фактически доступный для ваших приложений: (10017 - (9475 - 8531)) = 9073. Имеет ли это смысл?
Вик
Я думаю, что вы не правы: вторая строка исключает кэш и буферы и является фактическим использованием памяти приложениями (и это то, что говорит ваша ссылка ...).
assylias