Разберем типичную и крайне неприятную ситуацию в администрировании серверов «1С:Предприятие»: после добавления оперативной памяти на физический сервер администратор снимает или значительно увеличивает лимиты потребления памяти в консоли кластера (например, задает допустимый объем памяти в 7 Гб или обнуляет его), однако рабочий процесс rphost при приближении к 3,5 Гб все равно аварийно завершается или перезапускается. Выясним причину такого поведения платформы и рассмотрим варианты решения проблемы.
Проанализируем техническую сторону вопроса. Главная причина кроется в разрядности установленного сервера платформы «1С:Предприятие». Исполняемый файл 32-битного рабочего процесса rphost.exe скомпилирован с поддержкой флага расширенного адресного пространства (Large Address Aware). В 64-битной операционной системе Windows такой процесс чисто теоретически способен адресовать не более 4 Гб виртуального адресного пространства.
Однако занять все 4 Гб под прикладные задачи процесс физически не может по следующим причинам:
Out of memory).На практике граница стабильной работы любого 32-битного процесса наступает в диапазоне от 3,2 до 3,6 Гб. После преодоления этой планки процесс неизбежно падает, даже если физической памяти на сервере установлено с огромным запасом.
Отсюда вытекает важный вывод: параметры кластера «Допустимый объем памяти» и «Интервал превышения допустимого объема памяти» лишь управляют внутренним мониторингом со стороны менеджера кластера rmngr. Если задать в свойствах кластера допустимый размер в 7 Гб или полностью обнулить значение, физические законы 32-разрядной адресации не изменятся: платформа просто перестанет заранее и мягко контролировать порог, а процесс продолжит аварийно падать по системной ошибке нехватки памяти.
Рассмотрим основной и самый надежный способ решения проблемы. Единственный путь, позволяющий процессу rphost беспрепятственно использовать 7 Гб, 16 Гб, 32 Гб и более оперативной памяти на один процесс, — это переход на 64-разрядную версию сервера «1С:Предприятие» (x86-64).
Разберем по шагам, что дает переход на платформу x64:
Для перехода потребуется лицензия на сервер «1С:Предприятие (x86-64)», дистрибутив 64-битного сервера и переустановка службы кластера.
Если переход на 64-битную платформу временно невозможен, настроим кластер 1С так, чтобы суммарно задействовать всю оперативную память сервера без аварийных падений сеансов пользователей.
Посмотрим на логику работы: один 32-битный процесс rphost ограничен объемом ~3,5 Гб, но операционная система способна одновременно выполнять множество таких процессов. Два процесса смогут суммарно использовать около 7 Гб памяти, четыре процесса — до 14 Гб. Наша задача — заставить менеджер кластера распределять пользователей и базы между отдельными процессами.
Настроим свойства кластера и рабочего сервера по следующим шагам:
rphost, направит новые подключения туда, а старый завершит только тогда, когда в нем закроются активные транзакции.rphost, распределяя общую нагрузку по памяти.rphost, и интенсивная работа пользователей в одной базе не спровоцирует сбой в другой.Проанализируем программный код, если процесс rphost набирает критические 3,5 Гб за считанные минуты. Быстрое исчерпание памяти в сеансах обычно провоцируют:
ТаблицаЗначений на сервере.ДвоичныеДанные вместо потоковой обработки на диске.Таким образом, для ликвидации перезапусков процесса необходимо либо настроить кластер на распределение соединений по нескольким процессам rphost с упреждающим контролем памяти до 3 Гб, либо произвести миграцию на 64-разрядную версию платформы «1С:Предприятие».