При обновлении тяжелых современных конфигураций (таких как 1С:Бухгалтерия предприятия 3.0) на старых операционных системах или 32-разрядных серверах системные администраторы часто сталкиваются с критической ошибкой: «Недостаточно памяти», после чего Конфигуратор аварийно закрывается. Давайте подробно разберем, почему возникает эта проблема, и рассмотрим практические методы ее решения.
Современные конфигурации 1С на управляемых формах содержат колоссальное количество метаданных и сложных взаимосвязей. В процессе обновления (особенно при сравнении и объединении конфигураций) программа выполняет ресурсоемкие математические расчеты структуры базы данных.
В 32-разрядных операционных системах Windows (а также для любых 32-битных процессов) адресное пространство одного процесса жестко ограничено 2 ГБ. Как только Конфигуратор (процесс 1cv8.exe) или рабочий процесс сервера 1С (rphost.exe) пытается потребовать больше этого лимита, операционная система принудительно завершает его работу. Даже если на вашем физическом сервере установлено 16 ГБ или 32 ГБ оперативной памяти, один 32-битный процесс физически не сможет использовать более 2 ГБ без специальных настроек.
Проанализируем эффективные методы обхода этого ограничения по шагам.
На интернет-форумах часто советуют использовать утилиту bcdedit /set increaseuserva. Однако важно указать на критическую ошибку этого совета применительно к старым системам: в Windows Server 2003 утилиты bcdedit не существует (она появилась только в Windows Vista и Windows Server 2008).
В Windows Server 2003 ограничение в 2 ГБ для одного процесса обходится путем ручного редактирования файла конфигурации загрузки boot.ini, который находится в корне системного диска (обычно C:\boot.ini). Мы можем перераспределить оперативную память, выделив процессам пользователей до 3 ГБ адресного пространства вместо стандартных 2 ГБ.
Выполним следующие действия по шагам:
boot.ini в корневом каталоге.boot.ini с помощью Блокнота.[operating systems]./3GB и /userva=2900. Параметр /userva (рекомендуется устанавливать в диапазоне от 2900 до 3030) позволяет более гибко настроить распределение памяти, чтобы операционной системе гарантированно хватило ресурсов для стабильной работы ядра.Рассмотрим пример того, как должна выглядеть строка в файле boot.ini после внесения изменений:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /3GB /userva=2900
Сохраним файл, вернем ему исходные системные атрибуты и перезагрузим сервер. После перезагрузки процесс обновления 1С получит доступ почти к 3 ГБ памяти, что во многих случаях позволит успешно завершить обновление.
Выясним еще одну важную деталь. Даже если ваш сервер работает под управлением 64-битной операционной системы и на нем развернут 64-битный сервер 1С:Предприятия, вы все равно можете получить ошибку нехватки памяти. Это происходит потому, что обновление часто запускается через 32-разрядный Конфигуратор.
По умолчанию ярлыки запуска 1С ведут в папку 32-битного клиента (C:\Program Files (x86)\1cv8\...). Чтобы решить проблему, запустим процесс обновления принудительно через 64-разрядный исполняемый файл Конфигуратора, который расположен в папке C:\Program Files\1cv8\... (если на компьютере администратора установлена 64-битная версия платформы).
Если у вас нет возможности переустановить серверную ОС на 64-разрядную версию или приобрести дорогостоящую лицензию на 64-битный сервер 1С прямо сейчас, существует надежный административный "лайфхак". Мы можем перенести тяжелую процедуру сравнения метаданных на обычный современный рабочий компьютер.
Разберем этот алгоритм подробно по шагам:
Администрирование — Выгрузить информационную базу... и сохраним файл резервной копии (с расширением .dt)..dt.Конфигурация — Сохранить конфигурацию в файл... и выгрузим файл конфигурации (с расширением .cf).Конфигурация — Загрузить конфигурацию из файла... и выберем наш файл .cf. Затем нажмем клавишу F7 для обновления конфигурации базы данных.Этот метод чрезвычайно эффективен, так как серверу 1С больше не требуется выполнять сложнейшие операции сравнения конфигурации поставщика с основной конфигурацией — вся эта работа уже проделана на вашем рабочем компьютере, а сервер лишь применяет готовые изменения к таблицам базы данных, что требует в разы меньше оперативной памяти.
Иногда ошибка нехватки памяти вызвана не только объективной тяжестью обновления, но и внутренними ошибками в базе данных или накопленным «мусором» в оперативной памяти сервера. Перед запуском обновления выполним несколько важных регламентных процедур:
Local Settings\Application Data\1C\1Cv8 и Application Data\1C\1Cv8 для профиля пользователя, от имени которого запущена служба 1С).chdbfl.exe (для файлового варианта базы) или выполним операцию "Тестирование и исправление" в Конфигураторе, уделив особое внимание реиндексации таблиц и проверке логической целостности метаданных.rphost.exe) со временем накапливают фрагментацию памяти. Перед началом обновления обязательно перезапустим службу 1С:Предприятия на сервере, чтобы полностью высвободить заблокированное адресное пространство. Также рекомендуется проводить обновление ночью или в технологическое окно, когда на сервере нет активных сессий пользователей.Temp) свободно не менее 15-20 ГБ дискового пространства. При распаковке файлов обновления БП 3.0 создаются огромные временные файлы, нехватка места для которых также может маскироваться под ошибку нехватки ОЗУ.Используя предложенные методики, мы сможем успешно обновить конфигурацию 1С даже в условиях жестких ограничений устаревшей операционной системы Windows Server 2003.