
Как использовать dklab_vzmem
Vzmem — это утилита командной строки, которая позволяет «визуально» распределять физическую память между несколькими виртуальными машинами OpenVZ так, чтобы одна машина «не залезала» на другую. Т.е. если нужно увеличить память для какой-то из машин, всегда видно, откуда эту память требуется «откусить»: от одной из существующих машин или от пула свободных блоков.
Установка vzmem на серверРаспределение памяти задается в текстовом файле /etc/vz/conf/MEM-MAP, который выглядит примерно вот так:
cd /usr/sbin wget https://raw.github.com/DmitryKoterov/dklab_vzmem/master/vzmem chmod +x vzmem
Файл /etc/vz/conf/MEM-MAP
300 10003 vps1.example.com ========== 109552K 10004 vps2.example.com ============================== 335503K 20004 vps3.example.com ==========+++++++++++++++ 109552K + 221324K swap FREE ====================== 513525K
- Каждый значок "=" символизирует кусочек физической памяти (в данном примере — 1/300 ее часть) и влияет на значение параметра OpenVZ VMGUARPAGES (и также задает величину SHMPAGES). Перемещая значки "=" между разными виртуальными машинами, можно перераспределять память (утилита следит, чтобы в сумме количество блоков оставалось равно 300).
- Значки "+" символизируют «дополнительную память из неиспользуемых сейчас блоков или SWAP». Их можно добавлять, сколько угодно (но желательно — не очень много, чтобы машина в критических ситуациях не ушла в SWAP слишком сильно). В сумме количество значков "=" и "+" указывает значение параметра PRIVVMPAGES (то же самое значение записывается и в OOMGUARPAGES).
- Ну а значения в килобайтах после значков "=" и "+" вычисляются автоматически — их не надо изменять руками.
Применение изменений в MEM-MAP
Когда изменения в MEM-MAP внесены, нужно выполнить следующую команду:
Применение изменений в /etc/vz/conf/MEM-MAPИтого:
vzmem -a
- VMGUARPAGES = SHMPAGES = число_значков("=")
- PRIVVMPAGES = OOMGUARPAGES = число_значков("=") + число_значков("+")
Начальное создание файла MEM-MAP
Чтобы изначально создать /etc/vz/conf/MEM-MAP на основе имеющейся у вас конфигурации OpenVZ, выполните команду:
Начальное создание файла /etc/vz/conf/MEM-MAPВместо 300 можно задать любое число, которое определит, на сколько «блоков» следует разделить физическую память. Ставьте это число таким, чтобы было удобнее перемещать значки "=" и "+" из одной строки в другую.
vzmem -i 300
Если память на момент вызова vzmem -i уже распределена противоречивым образом, vzmem пытается распределить число значков "=" между машинами пропорциональным образом. На всякий случай проверьте результат после инициализации.
P.S.
Скрипт vzmem занимает 200 строчек на Perl (vzmem на GitHub). Если вдруг я изобрел велосипед, пишите в комментариях. Другие похожие по духу мелкие утилиты для OpenVZ: vzfirewall, vzset, vzenter.