Определившись с процессорными ресурсами, переходим к памяти. Это самый сложный вопрос, особенно для тех, кто только собирается внедрять клиент-серверную версию. Потому что нельзя точно ответить на вопрос о том, сколько надо оперативной памяти.
Даже одна и та же конфигурация с одним и тем же размером базы при разных сценариях использования будет иметь разный расход памяти. Хорошо, если у вас уже есть клиент-серверная система, тогда вы можете собрать метрики и сделать более-менее точные предположения.
Но так как данный вопрос не сходит с повестки дня, то постараемся дать некоторые общие ориентиры. Сразу оговоримся, сказанное ниже применимо только к типовым конфигурациям 1С с нагрузкой, не превышающей среднюю. В других сценариях цифры могут быть абсолютно другие.
1️⃣ Начнем с сервера 1С:Предприятие. Цифра, на которую следует ориентироваться – это 1-2 ГБ оперативной памяти на сеанс, можно взять среднее значение 1,5 ГБ и не сильно ошибиться. Понятно, что это среднее значение, реальные цифры могут изменяться от задач.
На одном из наших рабочих серверов с 1С:Бухгалтерия мы получили среднее значение 1,19 ГБ на сеанс, при этом были сеансы потреблявшие 400-700 МБ памяти, а были с потреблением 3-3,5 ГБ. Все зависит от роли и задач пользователя.
Также добавьте сюда регламентные и фоновые задания, которые тоже тратят память во время выполнения, иногда – значительную. По-хорошему, тяжелые фоновые задания следует настроить так, чтобы они работали за периодом пользовательской активности, так как именно они часто являются основной причиной «тормозов».
Отдельного внимания стоят сеансы через веб-сервер, не важно используется для работы тонкий клиент или веб-клиент в браузере. В целях повторного использования (так как создание сеанса – дорогая операция) сеанс сохраняется в течении 20 минут после отключения пользователя.
В ряде сценариев это может привести к повышенному расходу оперативной памяти несмотря на небольшое число активных пользователей.
Те же 20 минут действуют и для неактивных сеансов, после чего они уходят в сон и могут освободить ресурсы. Период завершения таких сеансов по умолчанию сутки.
2️⃣ И если с сервером 1С все более-менее ясно, то PostgreSQL представляет собой более сложную систему. Любой сервер СУБД имеет тенденцию утилизировать всю доступную память. Но на самом деле достаточно чтобы в нее помещались горячие данные, потому как база 1С:Предприятие может содержать большое количество нормативно-справочной или архивной информации.
Также сильно влияет и характер нагрузки, менеджеры, выписывающие накладный и бухгалтер закрывающий месяц – это две сильно большие разницы. Но надо же нам от чего отталкиваться?
Очень и очень приблизительный расчет можно сделать из размера базы данных. Эмпирическим путем была выведена общая формула:
Размер ОЗУ = Размер базы / 4 + 2 ГБ (но не менее 4 ГБ)
Еще раз напомним – эта формула применима только к типовым базам 1С:Предприятие с нагрузкой ниже среднего.
Для примера мы проверили несколько наших серверов:
🔹 Сервер №1
▫️Размер базы – 33 ГБ
▫️Размер ОЗУ по формуле – 10,25 ГБ
▫️Выделенный размер ОЗУ – 12 ГБ
▫️ Реальное потребление – 8,5 ГБ
🔹 Сервер №2
▫️Размер базы – 28 ГБ
▫️Размер ОЗУ по формуле – 9 ГБ
▫️Выделенный размер ОЗУ – 8 ГБ
▫️Реальное потребление – 3 ГБ
Основное различие баз – в количестве активных пользователей и операций, хотя и там и там установлена типовая 1С:Бухгалтерия.
Но даже такой расчет лучше, чем никакого и впоследствии вы всегда можете скорректировать эти значения.
3️⃣ Веб-сервер в клиент-серверном сценарии особых ресурсов не потребляет, так как занимается сугубо проксированием запросов и ресурсы ему можно выделить по остаточному принципу. В расчетах можно исходить из 2-10 МБ на сеанс.
4️⃣ На самом Proxmox, если вы используете ZFS – обязательно настройте выделение памяти для ARC исходя из формулы:
1 ГБ для хоста + 4-5 ГБ на 1 ТБ хранилища (но не менее 3 ГБ)
В противном случае, со значениями по умолчанию ZFS может использовать под кеш до 50% установленной памяти.
