Многие администраторы крупных внедрений 1С, особенно на базе 1С:ERP Управление предприятием, сталкиваются с парадоксальной ситуацией: оперативной памяти на сервере достаточно, загрузка процессоров минимальна, дисковая подсистема не перегружена, но пользователи начинают жаловаться на «тормоза». Основной симптом — медленное открытие любых форм и общая деградация отклика системы. Проанализируем, почему это происходит, когда рабочий процесс rphost достигает размера 15–20 Гб, и как правильно настроить кластер, чтобы избежать этой проблемы.
Рассмотрим внутренние механизмы платформы 1С. Процесс rphost является «сердцем» системы, в котором исполняется программный код, хранятся кэши метаданных и сеансовые данные пользователей. При росте объема памяти процесса до значительных величин вступают в силу несколько негативных факторов:
Non-Uniform Memory Access. Если один процесс rphost занимает, например, 40 Гб при наличии двух процессоров, он неизбежно начинает использовать память, физически подключенную к разным сокетам. Доступ к «чужой» памяти через шину межпроцессорного взаимодействия происходит значительно медленнее. Поскольку открытие формы — это последовательность тысяч мелких операций, эти микрозадержки суммируются в ощутимые секунды ожидания.Проанализируем ситуацию автора: 140–200 пользователей и настройка «40 соединений на процесс». Это приводит к тому, что формируется всего 4–5 рабочих процессов. Для такой тяжелой конфигурации, как ERP, это считается избыточной нагрузкой на один процесс. Посмотрим, как изменить эти параметры для оптимизации:
Для систем на базе ERP рекомендуется устанавливать параметр Количество соединений на один рабочий процесс в диапазоне от 10 до 20. Это позволит распределить нагрузку на большее количество процессов rphost, удерживая объем памяти каждого из них в безопасных пределах (до 8–10 Гб).
Рассмотрим пример расчета:
Выясним, как заставить платформу самостоятельно следить за здоровьем rphost. В консоли администрирования кластера 1С есть важные параметры, которые часто игнорируются. Разберем их подробнее:
Проанализируем алгоритм работы этих настроек: когда rphost превышает заданный лимит (например, 15 Гб), кластер перестает назначать на него новые соединения. Он запускает новый, «чистый» процесс для новых пользователей. Старый процесс продолжает работать, пока текущие пользователи не завершат свои сеансы или пока не истечет время принудительного завершения. Это позволяет «омолаживать» сервер без прерывания работы пользователей.
Разберем ситуацию, когда один «прожорливый» отчет может мгновенно раздуть память процесса. Чтобы защитить других пользователей, работающих в том же rphost, необходимо настроить лимит на одну операцию. Посмотрим на логику настройки:
В свойствах кластера найдем параметр Безопасный расход памяти за один вызов. Для ERP разумным значением будет диапазон от 2 до 4 Гб (указывается в байтах: 2 147 483 648 или 4 294 967 296). Если какой-то фоновый процесс или отчет попытается выделить больше памяти за один вызов сервера, система прервет эту операцию с ошибкой, сохранив работоспособность всего процесса rphost для остальных пользователей.
Посмотрим на поведение Windows Server. При достижении процессом больших объемов памяти ОС может начать агрессивно управлять его рабочим набором (Working Set). Если Windows решит, что часть данных rphost давно не использовалась (например, кэш форм, к которым не обращались 10 минут), она может переместить их в файл подкачки (pagefile), даже если свободная физическая память еще есть.
Когда пользователь решит открыть эту форму, 1С обратится к памяти, возникнет Hard Page Fault, и данные будут считываться с диска. Это вызывает те самые микрофризы интерфейса. Удержание процессов в компактном состоянии (до 10 Гб) минимизирует вероятность такого поведения ОС.
Подведем итог нашему анализу и сформулируем правила эксплуатации высоконагруженных систем:
rphost не занимал более 10–12 Гб. Регулируйте это через количество соединений на процесс.Рассмотрим пример настройки параметров кластера в консоли для сервера с 128 Гб ОЗУ и ERP:
Количество соединений на процесс: 15
Допустимый объем памяти: 15 728 640 (15 Гб в КБ)
Интервал превышения допустимого объема памяти: 300 (сек)
Выключать процессы с неисправностями: Да
Соблюдение этих правил обеспечит стабильную работу интерфейса и высокую скорость открытия форм даже при интенсивной работе большого количества пользователей.