Ошибка OpenVPN: MULTI: Out of memory during client pool allocation
- Сервер OpenVPN внезапно перестает принимать новые подключения с записью в логах:
MULTI: Out of memory during client pool allocation. - Существующие клиенты теряют связь, новые сессии завершаются статусом
Connection refused. - Системный мониторинг показывает исчерпание лимита файловых дескрипторов или памяти в slice службы systemd.
1. Переход на современную топологию подсети topology subnet
Устаревшая топология topology net30 выделяет виртуальную подсеть /30 (4 IP адреса) на каждого клиента, что мгновенно истощает адресный пул сервера.
В файле server.conf замените конфигурацию:
# Устаревшая конфигурация (не использовать):
# topology net30
# Оптимальная конфигурация:
topology subnet
server 10.8.0.0 255.255.240.0 # Подсеть /20 на 4094 хоста2. Ограничение и контроль максимального количества сессий
Установите жесткий лимит одновременных клиентов исходя из доступной серверной RAM:
# Ограничить пул до 1024 клиентов
max-clients 10243. Снятие ограничений ресурсов в Systemd Unit
Серверные процессы OpenVPN могут упираться в лимиты cgroup TasksMax или LimitNOFILE. Создайте переопределение:
systemctl edit openvpn-server@server.serviceВставьте конфигурацию:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
TasksMax=infinity
MemoryMax=4Gsystemctl daemon-reload
systemctl restart openvpn-server@server.service4. Очистка неактивных сессий (Keepalive tuning)
Уменьшите время удержания «мертвых» подключений в памяти сервера:
# Пинг каждые 10 секунд, отключение клиента при отсутствии ответа через 60 секунд
keepalive 10 60 Частые вопросы (FAQ)
Сколько оперативной памяти требуется одному клиенту OpenVPN?
В среднем один активный туннель в OpenVPN 2.5/2.6 требует от 250 КБ до 1 МБ оперативной памяти в зависимости от используемых шифров, буферов txqueuelen и размера таблицы маршрутов.
Чем topology subnet лучше topology net30?
Topology subnet работает как стандартный ethernet коммутатор: сервер забирает один адрес (например, 10.8.0.1), а каждый клиент получает ровно 1 адрес с единой маской подсети, экономя 75% IP-адресов.
Может ли утечка памяти в плагине авторизации вызвать эту ошибку?
Да, если используются сторонние скрипты auth-user-pass-verify или плагины LDAP/RADIUS с утечками дескрипторов, пул сессий быстро заполняется.
Как посмотреть текущее количество активных клиентов на сервере?
Настройте статус-лог в server.conf: status /var/log/openvpn/openvpn-status.log 10 и анализируйте секцию CLIENT LIST.