OpenVZ · 2 min read · Jan 04, 2026

Равномерное распределение ресурсов между OpenVZ VMs с помощью vzsplit

Равномерное распределение ресурсов между OpenVZ VMs с помощью vzsplit

Версия 1.0
Автор: Фалько Тимме

Этот краткий гид показывает, как вы можете равномерно распределить ресурсы вашего хоста OpenVZ между несколькими виртуальными машинами с помощью vzsplit. vzsplit генерирует файл конфигурации контейнера с определенным набором параметров управления системными ресурсами, которые вы затем можете применить к вашим виртуальным машинам.

Я не даю никаких гарантий, что это сработает для вас!

Использование vzsplit

Посмотрите на

man vzsplit

чтобы узнать больше о его использовании.

Теперь предположим, что мы хотим запустить 5 виртуальных машин на хосте OpenVZ. Мы вызываем vzsplit следующим образом:

vzsplit -n 5 -f max-limits

-n 5 указывает количество виртуальных машин.

server1:~# vzsplit -n 5 -f max-limits  
Оптимальный размер пространства подкачки составляет 2022 Мб, в два раза больше размера ОЗУ
ПРЕДУПРЕЖДЕНИЕ: Рекомендуемый минимальный размер раздела, содержащего /var/lib/vz/private/, составляет 20 Гб!  
Конфигурация /etc/vz/conf/ve-max-limits.conf-sample была создана  
server1:~#

Как вы видите, был создан файл /etc/vz/conf/ve-max-limits.conf-sample, который содержит максимальные значения параметров конфигурации для каждой из 5 виртуальных машин. Посмотрите на этот файл:

vi /etc/vz/conf/ve-max-limits.conf-sample

| # Файл конфигурации, сгенерированный vzsplit для 5 контейнеров # на HN с общим объемом физической памяти 1011 Мб # низкая память 883 Мб, размер подкачки 2047 Мб, Максимальные потоки 8000 # Уровень обязательства ресурсов 0: # Свободное распределение ресурсов. Любые параметры могут быть увеличены # Основные параметры NUMPROC="1600:1600" AVNUMPROC="452:452" NUMTCPSOCK="1600:1600" NUMOTHERSOCK="1600:1600" VMGUARPAGES="135985:2147483647" # Вторичные параметры KMEMSIZE="37052743:40758017" TCPSNDBUF="5797314:12350914" TCPRCVBUF="5797314:12350914" OTHERSOCKBUF="2898657:9452257" DGRAMRCVBUF="2898657:2898657" OOMGUARPAGES="135985:2147483647" PRIVVMPAGES="155342:170876" # Вспомогательные параметры LOCKEDPAGES="1809:1809" SHMPAGES="15534:15534" PHYSPAGES="0:2147483647" NUMFILE="14464:14464" NUMFLOCK="1000:1100" NUMPTY="160:160" NUMSIGINFO="1024:1024" DCACHESIZE="8088605:8331264" NUMIPTENT="200:200" DISKSPACE="117286:129015" DISKINODES="110065:121072" CPUUNITS="8587" |

Как вы видите, этот файл не содержит специфичных для ВМ настроек, таких как имя хоста, IP-адрес, серверы имен и т.д., что имеет смысл, потому что мы не хотим перезаписывать эти настройки.

Теперь предположим, что мы хотим применить эти настройки к нашей ВМ с ID 101. Вот как мы это делаем:

vzctl set 101 --applyconfig max-limits --save

После этого вы можете запустить/перезапустить ВМ 101:

vzctl start 101

Вы можете увидеть что-то вроде этого:

server1:~# vzctl start 101  
Запуск контейнера ...  
vzquota : (предупреждение) block_hard_limit [129115] < block_current_usage [139856]  
Контейнер смонтирован  
Добавление IP-адреса(ов): 192.168.0.101  
bash: строка 402: printf: ошибка записи: Превышен лимит дискового квоты  
bash: строка 416: printf: ошибка записи: Превышен лимит дискового квоты  
bash: строка 421: echo: ошибка записи: Превышен лимит дискового квоты  
bash: строка 447: printf: ошибка записи: Превышен лимит дискового квоты  
Установка единиц ЦП: 8587  
Настройка meminfo: 155342  
Установка имени хоста: test.example.com  
awk: ошибка закрытия файла /dev/stdout (Превышен лимит дискового квоты)  
ОШИБКА: Невозможно изменить файл /etc/hosts  
vzquota : (предупреждение) block_hard_limit [129015] < block_current_usage [139856]  
Запуск контейнера в процессе...  
server1:~#

По какой-то причине vzsplit рассчитала неправильный размер диска. Вы можете исправить это следующим образом (это установит размер диска с мягким лимитом 10 ГБ и жестким лимитом 11 ГБ - отрегулируйте это по вашим потребностям):

vzctl set 101 --diskspace "10000000:11000000" --save

Затем перезапустите ВМ:

vzctl restart 101

Вы можете посмотреть новые настройки для ВМ следующим образом:

vzctl exec 101 cat /proc/user_beancounters
server1:/etc/vz/conf# vzctl exec 101 cat /proc/user_beancounters  
Версия: 2.5  
       uid  ресурс           занято    максимум  барьер      лимит    failcnt  
      101:  kmemsize         340278     580635   37052743   40758017          0  
            lockedpages           0          0       1809       1809          0  
            privvmpages         796       1655     155342     170876          0  
            shmpages              0          0      15534      15534          0  
            dummy                 0          0          0          0          0  
            numproc               5          9       1600       1600          0  
            physpages           486       1060          0 2147483647          0  
            vmguarpages           0          0     135985 2147483647          0  
            oomguarpages        486       1060     135985 2147483647          0  
            numtcpsock            1          2       1600       1600          0  
            numflock              1          2       1000       1100          0  
            numpty                0          1        160        160          0  
            numsiginfo            0          2       1024       1024          0  
            tcpsndbuf          8928          0    5797314   12350914          0  
            tcprcvbuf         16384          0    5797314   12350914          0  
            othersockbuf       2232       3624    2898657    9452257          0  
            dgramrcvbuf           0          0    2898657    2898657          0  
            numothersock          1          3       1600       1600          0  
            dcachesize            0          0    8088605    8331264          0  
            numfile             129        193      14464      14464          0  
            dummy                 0          0          0          0          0  
            dummy                 0          0          0          0          0  
            dummy                 0          0          0          0          0  
            numiptent            10         10        200        200          0  
server1:/etc/vz/conf#

Столбец failcnt очень важен, он должен содержать только нули; если это не так, это означает, что ВМ нуждается в большем количестве ресурсов, чем в настоящее время выделено ВМ.

Чтобы узнать о памяти, выделенной ВМ, выполните

vzctl exec 101 free
server1:~# vzctl exec 101 free  
             всего       использовано     свободно     общий     буферы     кэш  
Mem:        621368       3268     618100          0          0          0  
-/+ буферы/кэш:       3268     618100  
Swap:            0          0          0  
server1:~#

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.