dil: (Default)
dil ([personal profile] dil) wrote2012-09-04 07:25 pm

Кто съел память?

Занимательная задачка из практики:

Виртуальная машина с линуксом в VMWare. 25 гигов памяти (в виртуалке). Внезапно мониторинг заорал, что память кончается. Пошли смотреть. Натурально, съедено гигов 20.

Сначала грешили на джаву, на которой там крутится пара десятков процессов. Погасили все. Не помогло, всё равно 16 гигов кто-то занимает.

А кто — загадка… Если просуммировать виртуальную память, занятую всеми процессами, набирается всего гигабайта четыре, а на самом деле ещё меньше, поскольку часть её делится на несколько процессов. Сегментов shared memory всего два, по 4 байта каждый. Под буфера занято мегабайт сорок.

А 16 гигов кто-то пожрал. Кто?!

Upd: дисковый кэш тоже ни при чём, он побольше, чем буфера, но всё равно в пределах нескольких десятков мегабайт.

tmpfs не используется.

Оригинал этой записи в личном блоге.

[identity profile] coolcold.livejournal.com 2012-09-04 09:43 pm (UTC)(link)
ну там в /proc/meminfo , slabtop посмотреть?

[identity profile] coolcold.livejournal.com 2012-09-05 08:44 am (UTC)(link)
Ну т.е. из meminfo не становится ясно в какую конкретно область применения ушла память?

[identity profile] coolcold.livejournal.com 2012-09-05 10:52 am (UTC)(link)
Я загадку понял так - кто знает куда надо было посмотреть чтобы понять :)

[identity profile] pash7ka.livejournal.com 2012-09-04 09:54 pm (UTC)(link)
Может это дисковый кэш так вырос?

[identity profile] 3apa3a-b-ta3e.livejournal.com 2012-09-04 11:16 pm (UTC)(link)
Memory balloon, я прозреваю.

[identity profile] 3apa3a-b-ta3e.livejournal.com 2012-09-05 08:55 am (UTC)(link)
специальный драйвер в vm-tools, который "надувает" баллон в памяти виртуалки, когда памяти не хватает на хосте, заставляя гостевую ос своппиться.

[identity profile] 3apa3a-b-ta3e.livejournal.com 2012-09-05 12:35 pm (UTC)(link)
Ключевое слово - Vmware.
На самом деле - штука очень и очень полезная, MS пытался что-то такое повторить в Hyper-V, но получилось как всегда и всем рассказали, что "да и не надо вам это".

[identity profile] 3apa3a-b-ta3e.livejournal.com 2012-09-05 09:11 pm (UTC)(link)
Скажете тоже, залипнет, это ж не Hyper-V и не Xen-server.

У ESX`а далеко не один и даже не два способа показать всем ВМ на хосте больше памяти, чем реально есть в наличии (Memory Overcommitment). Если не работал один - сработает другой.

Balloon - это один из самых оптимальных способов, ВМ сама про себя гораздо лучше знает, как ей работать с памятью и что именно можно вытеснить в swap. Если же этот вариант недоступен (vm tools не установлены, например) - тут уже начнётся другая игра, memory compression или там tmps или ещё как-то.

[identity profile] 3apa3a-b-ta3e.livejournal.com 2012-09-06 07:45 am (UTC)(link)
Если честно, то не знаю, не сталкивался на практике.

Вообще, если все ВМ на хосте захотят всю память одновременно, при этом есть Memory Overcommitment и у всех ВМ выключен баллон - следующий по логике шаг администратора будет выстрел в собственную ногу.

[identity profile] 3apa3a-b-ta3e.livejournal.com 2012-09-06 08:40 pm (UTC)(link)
Мне не очень интересно, если честно, ибо это вопрос из разряда - "а что будет, если в линуксе отключить своп и установить swappiness в 0".

[identity profile] 3apa3a-b-ta3e.livejournal.com 2012-09-05 12:36 pm (UTC)(link)
и да, я телепат 80го уровня :-)