Настройки Proxmox для более эффективного использования оперативной памяти

7 способов сэкономить RAM в Proxmox

Оперативная память (RAM) — это один из тех ресурсов домашней лаборатории, который может исчезнуть ОЧЕНЬ быстро, особенно если не уделять внимания его распределению. В современном мире RAM является дефицитным товаром, покупка которого обходится недешево. Существует несколько способов расширить доступную оперативную память в Proxmox. Некоторые из них позволяют реально снизить потребление памяти. Ниже описаны семь способов оптимизации использования RAM на серверах Proxmox.

1. Замена небольших виртуальных машин Proxmox контейнерами LXC

Один из способов экономии памяти в среде Proxmox довольно прост. Рекомендуется не создавать полноценную виртуальную машину, если для этого нет конкретной причины. Вместо этого следует использовать контейнеры LXC. Это может показаться простым и незначительным, но это изменение в подходе к администрированию.

При сравнении LXC с полноценной ВМ видно, что виртуальной машине требуются собственные ОС и ядро. При создании 5 виртуальных машин Ubuntu каждая из них будет иметь отдельную операционную систему Linux, со своим ядром, службами, кэшем памяти, процессами и т.д.

Ниже показан пример запуска контейнера Debian LXC на Raspberry Pi 5 с ограниченным объемом RAM (8 ГБ):

Running a debian lxc container on a raspberry pi
Запуск контейнера debian lxc на raspberry pi

Контейнеры LXC работают иначе. Они используют ядро хоста Proxmox, предоставляя при этом изолированные пользовательские пространства. Это устраняет значительный объем дублирующихся накладных расходов. Для легких self-hosted сервисов это может дать огромную экономию памяти. Сервис, которому внутри ВМ могло потребоваться 4 ГБ, может нормально работать внутри контейнера LXC с 512 МБ RAM, в зависимости от типа сервиса.

При масштабировании этого подхода на 15 или 20 LXC вместо ВМ экономия становится весьма существенной. LXC отлично подходят для небольших веб-приложений, утилит, компонентов мониторинга, инструментов управления, служб DNS и других рабочих нагрузок Linux, которым не требуется аппаратная изоляция ВМ.

Что касается Docker, важно сделать замечание. Сам по себе Docker чрезвычайно легок. Неэффективность возникает, если выделять «толстую» ВМ всего для 1 или 2 контейнеров Docker. Вместо этого следует консолидировать их на как можно меньшем количестве хостов Docker, что снизит общий объем занимаемой памяти. Использование LXC вместо ВМ, где это возможно, и консолидация контейнеров Docker позволяют сэкономить значительный объем RAM.

2. Размещение swap Proxmox на быстром накопителе

В целом, к разделу подкачки (Swap) относятся предвзято. Вероятно, это связано с прошлым, когда при нехватке физической памяти машины начинали активно использовать swap на диске, и производительность резко падала. Однако с тех пор скорость накопителей значительно выросла.

Конечно, ни один NVMe SSD не сравнится по чистой скорости, задержкам и пропускной способности с памятью DDR5. Но это не значит, что его нельзя использовать с умом для помощи при нехватке памяти.

Был проведен эксперимент по тестированию выделенного диска для swap Proxmox. Для этого использовался старый диск Intel Optane. Optane имеет очень низкую задержку по сравнению с обычными NVMe дисками, во многом имитируя оперативную память. Он и был использован для пространства подкачки Proxmox.

Intel optane ssd
Intel optane ssd

Быстрые накопители, такие как диски Optane, делают процесс подкачки гораздо менее болезненным, чем во времена, когда swap размещался на шпиндельных дисках (HDD). При нехватке физической памяти swap может принять на себя часть нагрузки, не позволяя механизму Linux OOM killer (Out-Of-Memory killer) начать принудительное завершение процессов.

Viewing swap running on an nvme drive
Просмотр swap, работающего на nvme диске

В Linux или Proxmox проверить состояние памяти и swap можно следующей командой:

Checking memory and swap in linux or proxmox
Проверка памяти и swap в linux или proxmox

Также полезна команда:

Checking that swap is turned on
Проверка того, что swap включен

Подробности эксперимента и результаты тестирования доступны в полной статье: Руководство по настройке Proxmox Swap! Выделенный диск, Swappiness, Page Cluster.

3. Использование Proxmox memory ballooning

Чтобы извлечь максимум из физической памяти, установленной на хосте Proxmox, можно использовать функцию memory ballooning. Это один из самых полезных инструментов для эффективного использования ресурсов RAM.

Идея заключается в следующем. Виртуальная машина конфигурируется с максимальным объемом памяти, который она может получить. Функция позволяет Proxmox забирать часть этой памяти обратно, если гостевая ОС не использует ее активно. Например, если виртуальной машине выделено 16384 МБ памяти, можно установить минимальный объем памяти: 2048 и убедиться, что устройство ballooning включено.

Proxmox ballooning device
Устройство Proxmox ballooning

В результате ВМ может задействовать до 16 ГБ памяти, когда это необходимо. Но Proxmox имеет возможность забрать часть этой выделенной памяти обратно, когда ВМ не использует ее активно для страниц памяти.

Например, можно настроить ВМ следующим образом:

Здесь есть пара нюансов. Необходимо установить драйвер balloon. В Linux это обычно происходит автоматически, но гостевые системы Windows также могут использовать эту функцию с драйверами VirtIO. Также следует помнить, что лучше избегать использования memory ballooning для нагрузок, чувствительных к изъятию памяти.

Хорошим примером является ВМ с базой данных. Ей может быть выделено много памяти, которая необходима для кэширования данных. Поэтому ballooning следует рассматривать как инструмент, а не как опцию, которую нужно включать для КАЖДОЙ ВМ.

4. Правильный подбор объема памяти для ВМ Proxmox

Стоит признать, что при создании виртуальных машин в домашних лабораториях объем выделяемой памяти часто определяется «на глаз». Хотя такой подход нередко бывает успешным, он определенно может привести к серьезному избыточному выделению ресурсов (overprovisioning) или, что бывает гораздо реже, к их нехватке.

Overprovisioning a vm can be a huge waste of resources
Избыточное выделение ресурсов ВМ может быть пустой тратой ресурсов

Рассмотрим, как это работает при использовании клонирования. Создается ВМ Ubuntu с 8 ГБ RAM, которая затем преобразуется в шаблон. При клонировании из этого шаблона клон получит те же 8 ГБ RAM, независимо от того, нужны они ему или нет.

По этой причине рекомендуется создавать шаблон с ОЧЕНЬ маленьким объемом памяти. Таким образом, нехватка памяти при запуске клона заставит обратить на это внимание и увеличить объем RAM, выделенной виртуальной машине. Для домашней лаборатории это лучше, чем непреднамеренное использование всей памяти клонами.

5. Проверка эффективности дедупликации памяти KSM

KSM — это служба Kernel Samepage Merging. Это функция управления памятью Linux, которая также присутствует в Proxmox. KSM ищет идентичные страницы памяти и позволяет ядру Linux объединять их. Это полезная функция, особенно в домашней лаборатории, где может работать несколько ВМ с одинаковой операционной системой, библиотеками и службами, поскольку они могут быть дедуплицированы.

О KSM легко забыть, так как управление им часто происходит в автоматическом режиме. Но эту службу полезно проверять время от времени, особенно если хост находится под давлением нехватки памяти.

Первый счетчик, который можно проверить:

Это значение показывает, сколько страниц памяти в данный момент используют дедуплицированные страницы KSM. Если дубликатов много, это число будет довольно большим.

Также можно проверить, запущен ли сканер KSM, с помощью команды:

Результаты:

  • Значение 1 – KSM запущен
  • Значение 0 – KSM остановлен

Если отображается 0, это не обязательно означает проблему; возможно, давление на память недостаточно велико для включения службы. Proxmox использует службу ksmtuned для управления KSM. Следующим шагом стоит проверить ее статус:

При проверке на одном из хостов Proxmox было обнаружено интересное наблюдение. Служба ksmtuned была включена и работала, но значения run и pages_sharing были равны 0.

Checking ksm page sharing
Проверка ksm page sharing

Затем был проверен хост:

Хост имел 128 ГБ физической памяти, из которых было доступно около 85 ГБ. Это означало, что у хоста не было веских причин для поиска дубликатов страниц на данный момент.

При желании можно выполнить быструю проверку KSM на хосте Proxmox с помощью этих простых команд:

6. Очистка ненужных ресурсов Proxmox

В домашней лаборатории неизбежно накапливаются сервисы и ресурсы, которые, вероятно, больше никогда не понадобятся. Они могут оставаться в системе долгое время, так как находятся вне поля зрения. Рекомендуется еженедельно проверять запущенные сервисы и удалять все, что было оставлено по ошибке или не использовалось долгое время. Это включает шаблоны ВМ, шаблоны LXC, снимки состояний (snapshots), неиспользуемые ISO-образы и т.д.

Looking at snapshots in pveviewer to audit proxmox environment
Просмотр снимков в pveviewer для аудита среды proxmox

Это позволяет избежать работы ВМ-зомби и контейнеров LXC в среде Proxmox. То же самое касается и контейнеров Docker, так как можно накопить множество контейнеров, даже не осознавая этого.

Дополнительная информация доступна в статье: 9 задач по очистке Proxmox, о которых вы, вероятно, забыли.

7. Предотвращение давления ZFS ARC на виртуальные машины

Последний пункт важен, если используется ZFS в кластере или на хосте Proxmox. ZFS очень требовательна к RAM. Она использует память для адаптивного кэша замены (Adaptive Replacement Cache), сокращенно ARC. ARC хранит наиболее часто используемые данные в памяти, чтобы ZFS не приходилось многократно извлекать их с более медленных накопителей.

Посмотреть статистику ARC в Proxmox можно с помощью команды:

ZFS может освобождать память ARC, когда она требуется системе. Однако в системах с ограниченным объемом памяти при использовании ZFS (что весьма вероятно в домашней лаборатории) можно установить максимальный объем ARC.

Для этого необходимо отредактировать файл:

Пример добавляемой строки:

Значение в файле указывается в байтах:

  • 8 ГБ = 8589934592
  • 16 ГБ = 17179869184
  • 32 ГБ = 34359738368
  • 64 ГБ = 68719476736

Затем необходимо обновить initramfs:

Последний шаг — перезагрузка:

Заключение

Не существует единственного волшебного способа получить больше физической RAM, чем установлено в системе. Однако описанные приемы позволяют ослабить давление на ресурсы памяти в лабораторной среде и улучшить производительность без физического расширения системной памяти. Если используются другие методы, не указанные здесь, рекомендуется поделиться ими с сообществом в комментариях.

Источник на английском языке

Читайте про Свой умный дом локально:
🌐 Сайт
📱 Телеграм
📰 Дзен

Даже просто подбор, перевод и оформление статей требуют времени. А самостоятельный обзор устройств требует еще и финансовых вложений. Если Вы хотите больше обзоров, Вы можете помочь автору.