Как исправить ошибку «Недостаточно памяти» при обновлении нетиповой конфигурации 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

Обновление крупных и сложных прикладных решений, таких как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, требует значительных вычислительных ресурсов. В ситуациях, когда конфигурация снята с полной поддержки и содержит множество доработанных модулей, штатный механизм трехстороннего сравнения и объединения может завершаться аварийно с системным сообщением «Недостаточно памяти» (Out of memory).

Проанализируем природу этой ошибки, выясним ключевые факторы, приводящие к исчерпанию адресного пространства, и разберем пошаговый алгоритм устранения проблемы.

Причины возникновения ошибки при сравнении и объединении

Рассмотрим, почему процесс обновления ресурсоемких систем вызывает сбой выделения памяти:

  1. Ограничение разрядности клиентского приложения (x86/x32). По умолчанию 32-разрядный процесс операционной системы Windows может адресовать не более 2 ГБ виртуальной памяти (или до 3–4 ГБ при специальных системных настройках). Механизм сравнения метаданных 1С:ERP одновременно удерживает в оперативной памяти основную конфигурацию, конфигурацию поставщика текущего релиза, новую конфигурацию из файла обновления (cfu или cf), а также дерево различий. Для 32-разрядного процесса этого объема оказывается недостаточно.
  2. Фрагментация и разрастание служебных таблиц метаданных. В процессе длительной разработки и многократных промежуточных обновлений внутренние таблицы базы (Config, ConfigSave) накапливают устаревшие версии структур, что увеличивает объем распаковываемых данных.
  3. Наличие нескольких конфигураций поставщика. Если в свойствах поддержки сохранены неактуальные или задвоенные конфигурации поставщика от прошлых релизов, конфигуратор пытается проанализировать их все, лавинообразно расходуя оперативную память.
  4. Переполнение временных каталогов и блокировка кэша. Во время парсинга текстов модулей конфигуратор создает сотни тысяч временных файлов в системном каталоге %TEMP%, что при медленном дисковом вводе-выводе или работе антивируса приводит к переполнению буферов памяти.

Способ 1. Переход на 64-разрядную версию платформы (клиент x64)

Основное и самое надежное решение при работе с тяжелыми конфигурациями — выполнение операции обновления исключительно через 64-разрядный клиент «1С:Предприятие».

Разберем по шагам, как правильно переключить запуск:

  1. Убедимся, что на рабочей станции или сервере установлен дистрибутив «Клиент 1С:Предприятия (64-bit)» соответствующей версии технологической платформы.
  2. Откроем окно запуска 1С, выделим необходимую информационную базу и нажмем кнопку «Изменить...».
  3. Перейдем на последнюю вкладку настроек параметров запуска и в поле «Разрядность» принудительно укажем «64 (x86_64)» вместо значения «32 (x86)» или «Автоматически».
  4. Запустим конфигуратор и выполним операцию сравнения и объединения конфигураций повторно. В 64-разрядном адресном пространстве лимит оперативной памяти практически неограничен и упирается только в физический объем RAM и размер файла подкачки.

Способ 2. Очистка кэша и реструктуризация таблиц метаданных

Если ошибка повторяется даже в 64-разрядной среде, причиной может служить поврежденный кэш или фрагментация внутренних таблиц. Разберем порядок профилактических действий:

  1. Очистим пользовательский кэш конфигуратора. Завершим все сеансы работы с базой и удалим содержимое каталогов:
    %LocalAppData%\1C\1Cv8
    %AppData%\1C\1Cv8
  2. Очистим временные файлы операционной системы. Полностью очистим каталог %TEMP% текущего пользователя.
  3. Выполним проверку целостности конфигурации. В меню конфигуратора откроем пункт «Конфигурация» — «Проверка конфигурации», включим проверку логической целостности и синтаксический контроль модулей.
  4. Сделаем выгрузку и загрузку информационной базы через файл .dt. Создадим резервную копию базы данных в файл выгрузки, создадим новую пустую базу в СУБД и загрузим .dt обратно. Эта процедура полностью перестраивает таблицы Config и ConfigSave, удаляя фрагментированные служебные записи.

Способ 3. Проверка и удаление лишних конфигураций поставщика

Проанализируем состояние правил поддержки в базе данных. Для этого перейдем в меню «Конфигурация» — «Поддержка» — «Настройка поддержки».

В открывшемся окне проверим список зарегистрированных конфигураций поставщика. Если в таблице отображаются конфигурации от старых версий или сторонних подсистем, которые более не используются, их следует снять с поддержки и удалить. В базе должна оставаться только одна актуальная конфигурация основного поставщика («1С:ERP»). Это существенно снизит объем данных, загружаемых в память при построении дерева сравнения.

Способ 4. Расширение адресного пространства для 32-разрядных систем

Если обновление временно приходится выполнять на 32-разрядном клиенте в 64-битной среде Windows, операционная система по умолчанию ограничивает пользовательский процесс 2 гигабайтами. Мы можем принудительно увеличить лимит виртуальной памяти для пользовательских приложений до 3072 МБ.

Разберем порядок настройки через командную строку Windows:

  1. Запустим командную строку cmd.exe от имени Администратора.
  2. Выполним системную команду увеличения лимита виртуальной памяти: bcdedit /set increaseuserva 3072
  3. Перезагрузим компьютер для применения параметров загрузчика.
  4. Выполним обновление информационной базы.
  5. После завершения работ рекомендуется вернуть системные настройки к исходным значениям с помощью команды: bcdedit /deletevalue increaseuserva

Способ 5. Альтернативная схема обновления на локальной копии

Для минимизации сетевых задержек, блокировок СУБД и сбоев оперативной памяти на продуктивном контуре рекомендуется применять регламент обновления через эталонный файл конфигурации:

  1. Выгрузим рабочую конфигурацию в файл .cf.
  2. Развернем на локальном компьютере с быстрым NVMe-накопителем и достаточным объемом RAM файловую или локальную клиент-серверную базу.
  3. Выполним полное трехстороннее объединение с новым релизом на копии, разрешим все конфликты в доработанных модулях и сохраним итоговую конфигурацию в единый результирующий файл .cf.
  4. В рабочей базе выполним простую операцию «Конфигурация» — «Сравнить, объединить с конфигурацией из файла...» или полную замену через «Загрузить конфигурацию из файла...». Это исключает тяжелые вычисления на продуктивном сервере и полностью решает проблему нехватки оперативной памяти.
  5. В перспективе перенесем нетиповой функционал в расширения конфигурации (Configuration Extensions), вернув основную конфигурацию на типовую поддержку.
← На главную