При обновлении крупных и ресурсоемких конфигураций семейства 1С (таких как «Бухгалтерия предприятия КОРП», «ERP Управление предприятием» или «Комплексная автоматизация») специалисты часто сталкиваются с неприятным сбоем. В процессе обновления конфигурации (обычно при достижении индикатора процесса 50–70%) программа аварийно завершает работу, выдавая лаконичное сообщение: «Недостаточно памяти». При этом физической оперативной памяти на сервере или рабочей станции может быть более чем достаточно — например, 16, 32 или даже 64 ГБ.
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем внутренние механизмы распределения памяти в операционной системе Windows и платформе 1С:Предприятие, а также рассмотрим комплекс практических методов решения этой проблемы — от самого простого и современного до альтернативных вариантов администрирования.
Основной корень проблемы кроется в архитектурных ограничениях разрядности приложений. Исторически сложилось, что на многих рабочих местах до сих пор установлен 32-разрядный (x86) клиент 1С:Предприятия.
В 32-битной архитектуре операционной системы Windows адресное пространство процесса жестко ограничено. По умолчанию любому пользовательскому 32-битному процессу (в нашем случае это файл 1cv8.exe) выделяется максимум 2 ГБ виртуального адресного пространства. Даже если операционная система является 64-разрядной, а на компьютере установлено огромное количество физической ОЗУ, стандартный 32-битный клиент 1С просто физически не способен адресовать более 2 ГБ (в редких случаях с использованием специальных флагов компиляции — до 3–4 ГБ).
Во время обновления конфигурации происходит масштабный процесс компиляции метаданных, сопоставления объектов новой и старой конфигураций, построения индексов и загрузки огромных макетов во временные структуры. Объем конфигурации «Бухгалтерия предприятия КОРП» в распакованном виде чрезвычайно велик. В момент пиковой нагрузки конфигуратор пытается выделить очередной блок памяти под дерево метаданных, превышает лимит адресного пространства в 3–4 ГБ, операционная система отказывает ему в выделении памяти, и процесс 1cv8.exe аварийно закрывается.
Давайте пошагово разберем самые эффективные способы решения этой проблемы.
Самым правильным, современным и долгосрочным решением является установка 64-битного тонкого и толстого клиента 1С:Предприятия. Начиная с версии платформы 8.3, полноценный 64-разрядный клиент под Windows поставляется официально и доступен всем пользователям с действующей подпиской поддержки.
Рассмотрим процесс перехода на 64-битный клиент по шагам:
(64-bit).Поскольку 64-разрядный процесс может адресовать практически неограниченный объем оперативной памяти (в пределах физически установленной ОЗУ и файла подкачки), проблема с нехваткой памяти при обновлении исчезнет раз и навсегда.
Если по каким-то организационным или техническим причинам вы не можете прямо сейчас установить 64-разрядного клиента (например, из-за несовместимости старых внешних компонент или драйверов торгового оборудования), можно временно расширить лимит виртуальной памяти для 32-битных программ средствами Windows.
Для этого мы воспользуемся встроенным загрузчиком Windows и утилитой bcdedit. Инструкция выглядит следующим образом:
cmd, нажимаем правой кнопкой мыши на найденную «Командную строку» и выбираем пункт «Запуск от имени администратора».
bcdedit /set increaseuserva 3072
bcdedit /deletevalue increaseuserva
Нередко конфигуратор начинает нерационально расходовать оперативную память из-за повреждения или чрезмерного разрастания файлов локального кэша метаданных. Кэш накапливает старые структуры конфигураций, что мешает корректной работе транслятора. Очистим его.
Проанализируем структуру папок кэша. Нам необходимо избавиться от временных файлов в профиле пользователя. Выполним следующие действия:
%userprofile%\AppData\Local\1C\1cv8.8f10b2df-d731-4e76... (это и есть локальные кэши баз).%userprofile%\AppData\Roaming\1C\1cv8 и также очистим папки кэша там.Альтернативный и более быстрый способ очистить кэш для конкретной базы — удалить её из списка зарегистрированных баз в окне запуска 1С, нажать кнопку «ОК», а затем добавить эту базу заново под тем же путем. При этом папка кэша, привязанная к старому идентификатору базы, автоматически перестанет использоваться.
Избыточный объем неиспользуемых данных в таблицах, логические ошибки и фрагментированные индексы приводят к тому, что при чтении конфигурации в оперативную память подгружается колоссальное количество лишней информации. Проведем обслуживание базы.
Запустим конфигуратор 1С, перейдем в главное меню: Администрирование -> Тестирование и исправление...
Нам потребуется отметить следующие опции:
1Cv8.1CD), существенно уменьшив объем считываемой информации.После успешного выполнения процедур оптимизации закроем конфигуратор, откроем его заново и запустим процесс обновления.
Если ошибка нехватки памяти возникает на сервере при обновлении клиент-серверной (SQL) базы данных, а обновить рабочие процессы сервера оперативно невозможно, мы можем прибегнуть к проверенному методу локального обновления. Суть схемы заключается в том, чтобы перенести тяжелую процедуру реструктуризации на локальный компьютер администратора, оснащенный мощным процессором, достаточным объемом ОЗУ и 64-битной платформой.
Рассмотрим алгоритм действий по шагам:
.dt..dt.Если ошибка возникает непосредственно на стороне сервера (когда операционная система аварийно завершает рабочий процесс сервера приложений rphost.exe), системному администратору необходимо скорректировать параметры кластера серверов 1С:
1C:Enterprise 8.3 Server Agent. Это освободит заблокированную память, очистит утечки памяти предыдущих сеансов и позволит начать обновление «с чистого листа».Не забываем о базовых настройках операционной системы. При компиляции крупных конфигураций Windows активно использует файл подкачки (pagefile.sys). Если на системном диске мало свободного места, Windows не сможет динамически расширить виртуальную память, что приведет к сбою нехватки ресурсов.
Выясним состояние виртуальной памяти и оптимизируем её:
C: свободно как минимум 20–30 ГБ дискового пространства.Мы детально проанализировали проблему нехватки памяти при обновлении программных решений 1С. Использование 32-разрядного клиента — главная системная причина возникновения этой ошибки при работе с современными конфигурациями. Переход на 64-разрядный клиент 1С полностью решает эту проблему за счет обхода ограничений на виртуальное адресное пространство процессов. Если этот способ временно недоступен, использование утилиты bcdedit, очистка локального кэша, регламентная оптимизация баз данных и грамотная настройка параметров виртуальной памяти помогут вам быстро и безболезненно довести обновление любой сложной конфигурации до успешного финала.