Худшие практики: virtual machine memory limit

Сегодня о “худшей практике” одной настройки виртуальной машины.

Некоторое время назад обнаружились серверы с большим уровнем IOPS – в районе 1000-1500 операций. Экспресс-диагностика не дала результата, а так как размер дисков машин был очень небольшим, то они были перемещены на локальные SSD, что сняло остроту проблемы.

Сейчас же обнаружились проблемы с терминальными серверами – довольно сильные лаги при большом количестве подключений. Анализ системы показал довольно классическую проблему – наличие baloon. Наличие “пузыря” в памяти насторожило, так как на хосте свободной памяти было с избытком. Ларчик открылся просто при 3 ГБ ОЗУ виртуальной машины стояла волшебная труодминская настройка memory limit 2 ГБ. К пущей радости, история умалчивает кто был этим тру одмином.

После такого открытия я запустил RVTools и проинспектировал все виртуальные машины на наличие лимитов памяти, ну, и на “пузыри” заодно.

Тут-то и всплыли виртуалки с большими IOPS, так как настройки на них были примерно следующие ОЗУ – 1,5 ГБ, лимит – 256 МБ. На одной из машины при ОЗУ 3 ГБ, лимит был 512 МБ, а размер  “пузыря” 2 ГБ.

Для чего понадобилось выставлять лимиты остаётся загадкой. Поснимал все лимиты на память, так как для моей конфигурации данный функционал не имеет смысла.

15 thoughts on “Худшие практики: virtual machine memory limit”

  1. В моей практике тоже появлялись эти лимиты. Но они выставлялись автоматом, а не руками. История примерно следующая:
    1. Делаем ВМ с памятью в 1ГБ.
    2. Увеличиваем ей память.
    3. Лимит остается.

    Не у всех, не всегда, но остается. Возможно, в какой-то момент vSphere ставила сама, а потом перестала. Сам я, как админ, таких лимитов не ставил, но они есть…

  2. Кхм. Такого не замечал. У меня предположение, что проблемные виртуалки сделаны путём конвертации с физики. Может у какой-то версии конвертера такое поведение?!

  3. Нет. Они точно сделаны с нуля. Причем их не мало 30-40.
    Т.е. это прямо массовость какая-то.

  4. 2Mr.Aloof
    Не понял твоей фразы, ты подразумеваешь,что автоматом ни с того, ни с сего ставились лимиты на память?

  5. Было дело, ставились лимиты в какой-то версии после клонирования или разворачивания из шаблона, точно не помню. Но было limit=сконфигурированный размер озу вм. Кажется, кейс еще заводил. Потом поправили.

  6. Господа, а как всё это выглядело изнутри ВМ?
    Т.е. в конфиге явно задано 2Г, в лимите – 512к. Сколько будет отображаться средствами ОСи изнутре ВМ?
    Вопрос не прозаичный и не из любопытства. Есть большие подозрения относительно собственной инфраструктуры, где рулят левые аутсорсеры.

  7. А изнутри ОСь считает что памяти у нее 2Г и использует ее под свои нужды.
    Гипервизор, руководствуясь тем что больше 512К выдавать нельзя, все что выше ложит в своп. Соответственно, если активной памяти требуется больше лимита, начинает дико использоваться хранилка со свопом. Если хранилка медленная – тут приходит пушистый зверь. При этом счетчиками изнутри нереально диагностировать причину.

  8. У Саши логика правильная, но порядок использования хостового свопа немного не такой, так как используется несколько механизмов экономии ОЗУ:
    – Transparent Page Sharing;
    – Memory Baloon;
    – Memory Compression;
    – Host Swap.
    Очень подробно расписано у Миши Михеева
    http://www.vm4.ru/2010/08/memory-management.html
    По поводу счетчиков внутри – если у вас винда, и в ней установлены VMware Tools, то счетчики по Virtual CPU и Virtual Memory для PerfMon доступны. А там есть все необходимое для диагностики…

  9. Я упростил чтоб было понятнее 😉
    Да, экономия памяти несколько сгладит проблему.

  10. На эту тему вспоминается лаба из курса по производительности:
    есть две одинаковые виртуальные машины с лимитом по памяти. У одной установлены VMware Tools, у второй – нет.
    В результате, с VMware Tools ВМ худо бедно шевелится. Без них – виснет на каждой операции.
    Разница в использовании свопа:
    – ВМ с VMware Tools “использует” механизм Memory Baloon;
    – ВМ без VMware Tools – Host Swap.
    И то своп, и другое своп. Но своп разный. 🙂

  11. Ну да. VMware ещё в 4.1 показывали производительность на уровне 80% от “нативной” со свопом на ssd. Я, если честно, был настроен скептически. Виноват

Leave a Reply

Your email address will not be published. Required fields are marked *