При выполнении обмена данными между конфигурациями (например, между 1С:Зарплата и управление персоналом и 1С:Бухгалтерия предприятия) через прямое подключение (COM-соединение) администраторы и разработчики нередко сталкиваются со сбоем выполнения фонового задания или регламентной процедуры. В журнале регистрации фиксируется исключительная ситуация:
Возникла ошибка во второй информационной базе: {ОбщийМодуль.ОбменДаннымиСервер.Модуль(5000)}: Ошибка при вызове метода контекста (ВосстановитьПравилаИзВнутреннегоФормата)
ОбработкаОбменаДаннымиВнешнееСоединение.ВосстановитьПравилаИзВнутреннегоФормата();
по причине:
Произошла исключительная ситуация: Превышен максимальный расход памяти сервера за один вызов
Разберем природу возникновения данной ошибки, выясним причину ее проявления на уровне платформы «1С:Предприятие 8.3» и рассмотрим пошаговые методы ее гарантированного устранения.
Начиная с версий платформы 8.3.10 и 8.3.11, в кластере серверов 1С задействован встроенный механизм защиты рабочих процессов (rphost) от утечек памяти и аварийных зависаний. Если параметры управления памятью в свойствах кластера или рабочего сервера не заданы явно (установлено значение по умолчанию 0), платформа рассчитывает ограничения автоматически на основе суммарного объема физической оперативной памяти (RAM) сервера:
Рассмотрим конкретный пример: если на сервере установлено всего 16 ГБ ОЗУ, лимит на один непрерывный серверный вызов составит примерно 1,28 ГБ. При выполнении метода ВосстановитьПравилаИзВнутреннегоФормата() происходит полная десериализация сложных правил обмена, сопоставление метаданных, таблиц конвертации и алгоритмов-обработчиков. Этот процесс выполняется в рамках единого непрерывного серверного контекста и требует кратковременного скачка памяти, который легко превышает 1,3–1,5 ГБ. В этот момент кластер 1С принудительно прерывает вызов с ошибкой превышения лимита.
Ситуация усугубляется, если сервер 1С и СУБД (например, MS SQL Server) функционируют на одном физическом или виртуальном сервере, а для базы данных не выставлен жесткий лимит потребления оперативной памяти.
Основным и наиболее быстрым решением является явное увеличение лимита расхода памяти в консоли администрирования кластера серверов 1С.
Проанализируем важный нюанс: попытка отключить контроль установкой значения -1 срабатывает не всегда корректно в зависимости от релиза платформы. Надежнее задать конкретное числовое значение с запасом.
rac).Рабочие серверы).21474836480. Если требуется лимит в 16 ГБ, укажем 17179869184.ragent) или выполним перезапуск рабочих процессов, чтобы новые параметры вступили в силу.Важное лицензионное ограничение: начиная с платформы 8.3.12, возможность гибкого ручного изменения параметров управления памятью кластера серверов (отличных от 0) является функционалом лицензий уровня КОРП. На лицензиях уровня ПРОФ изменение этих параметров может приводить к ошибкам несовместимости лицензий при старте рабочих процессов.
Если на сервере установлено 16 ГБ памяти и на нем совместно работают сервер приложений 1С и MS SQL Server, СУБД способна занять практически весь доступный объем под собственный буферный пул (Buffer Pool).
Выполним балансировку ресурсов:
6144 или 8192 МБ (6–8 ГБ).rphost сервера 1С.При прямом COM-соединении вызов ОбработкаОбменаДаннымиВнешнееСоединение.ВосстановитьПравилаИзВнутреннегоФормата() выполняется монолитно, загружая правила целиком в память контекста внешнего соединения.
Чтобы снизить пиковую нагрузку на память:
ЧтениеXML), что разбивает операции на порции и предотвращает критические скачки потребления памяти за один вызов.Если в базе-источнике было выполнено массовое перепроведение документов, в узле плана обмена накапливается огромный массив зарегистрированных изменений, что кратно увеличивает объем данных при подготовке правил и выгрузке.