«Недостаточно памяти» в 1С 8.3: причины на сервере и на компьютере пользователя

Ошибка «Недостаточно памяти» в 1С 8.3 почти никогда не значит, что на компьютере физически закончилась оперативная память. Чаще всего памяти не хватает конкретному процессу: 32-разрядному клиенту 1С, который не может занять больше нескольких гигабайт, или рабочему процессу сервера 1С (rphost), который упёрся в лимит или раздулся из-за утечки памяти (а течет в память он постоянно!).

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

Самые частые решения: установить 64-разрядный клиент 1С, разбить тяжёлый отчёт или обработку на части, обновлять конфигурацию из 64-разрядного конфигуратора, на сервере — проверить лимиты памяти рабочих процессов и перезапустить раздувшиеся rphost. Добавлять оперативную память имеет смысл только после того, как вы убедились, что её действительно не хватает всей системе.

Два разных случая: клиент и сервер

В 1С 8.3 работа идёт в нескольких процессах. На компьютере пользователя запущен клиент: тонкий (1cv8c.exe) или толстый и конфигуратор (1cv8.exe). В клиент-серверном варианте основная обработка данных идёт на сервере 1С, в рабочих процессах rphost.exe. В файловом варианте сервера нет, и всю работу с базой выполняет процесс клиента на компьютере пользователя.

От этого зависит, где искать проблему:

  • Файловая база. Отчёт, закрытие месяца, обновление конфигурации — всё считается в процессе 1С на компьютере пользователя. Если он 32-разрядный, памяти не хватит на первой же крупной операции.
  • Клиент-серверная база, ошибка на клиенте. Сервер подготовил данные, но клиенту не хватает памяти, чтобы их показать: огромный табличный документ, отчёт на сотни тысяч строк, выгрузка в Excel.
  • Клиент-серверная база, ошибка на сервере. Не хватает памяти рабочему процессу rphost или всему серверу. Сообщение обычно содержит слова «на сервере», и оно может появляться сразу у многих пользователей.

Если вы не уверены, какой у вас вариант работы, посмотрите в список баз: у файловой базы указан путь к папке, у клиент-серверной — имя сервера и имя базы. Если список баз настраивал администратор, уточните у него.

32-разрядный клиент 1С — самая частая причина

32-разрядная программа может адресовать не более 4 ГБ памяти, а на практике ей доступно ещё меньше: часть адресного пространства занята системой и библиотеками, и память со временем фрагментируется. При этом неважно, сколько ОЗУ установлено в компьютере. На машине с 32 ГБ 32-разрядная 1С всё равно получит свои несколько гигабайт и выдаст «Недостаточно памяти», когда их не хватит.

На практике мы видим одну и ту же картину: платформу когда-то поставили 32-разрядную «по умолчанию», база за годы выросла, и однажды перестаёт формироваться годовой отчёт или не проходит обновление. Диспетчер задач при этом показывает, что свободной памяти много. Это верный признак недостаточной разрядности программы и упора в адресное пространство процесса.

Как понять разрядность клиента

  1. Откройте «Диспетчер задач» (Ctrl+Shift+Esc) и запустите 1С.
  2. На вкладке «Процессы» у 32-разрядных программ к имени добавляется пометка «(32 бита)».
  3. Для точности перейдите на вкладку «Подробности», щёлкните правой кнопкой по заголовку таблицы, выберите «Выбрать столбцы» и включите столбец «Платформа». Для 1cv8c.exe или 1cv8.exe там будет указано «32 бита» или «64 бита».
  4. Можно проверить и по папке установки: 32-разрядная платформа обычно стоит в C:\Program Files (x86)\1cv8\, 64-разрядная — в C:\Program Files\1cv8\. На одном компьютере могут стоять обе, и запускаться может любая из них.

Как перейти на 64-разрядный клиент

  1. Убедитесь, что сама Windows 64-разрядная: «Параметры → Система → О системе», строка «Тип системы». На 32-разрядной Windows поставить 64-разрядную 1С нельзя.
  2. Скачайте дистрибутив 64-разрядной платформы той же версии, что и у остальных пользователей и сервера. В клиент-серверном варианте версия клиента должна совпадать с версией сервера 1С.
  3. Установите платформу. 32-разрядную можно оставить, если она нужна для старых внешних компонент или торгового оборудования.
  4. В окне запуска 1С откройте свойства базы («Изменить») и на странице с параметрами запуска укажите нужную разрядность, если такое поле есть в вашей версии. Иначе стартовое окно может продолжать запускать 32-разрядную версию.
  5. Запустите базу и снова проверьте в «Диспетчере задач», что процесс работает как 64-разрядный.

Учтите: некоторые старые внешние компоненты (драйверы оборудования, библиотеки обмена) существуют только в 32-разрядном варианте. Перед массовым переходом проверьте на одном рабочем месте, что печать чеков, сканеры и обмены работают.

Тяжёлые отчёты и обработки

Даже 64-разрядному клиенту можно задать операцию, для которой не хватит памяти. Типичные примеры:

  • универсальный отчёт или отчёт на СКД без отборов за несколько лет;
  • оборотно-сальдовая ведомость с детализацией по всем субконто и документам;
  • выгрузка большого табличного документа в Excel или PDF;
  • внешние обработки, которые загружают в память всю таблицу целиком, например групповое перепроведение или выгрузка данных за всё время;
  • обмен данными с большим пакетом сообщений.

Что делать:

  1. Сузьте период и добавьте отборы: по организации, складу, контрагенту.
  2. Уберите лишнюю детализацию и группировки. Отчёт до уровня документов за год почти никто не читает целиком.
  3. Формируйте отчёт частями, например по кварталам, и сохраняйте результаты отдельно.
  4. Длительные обработки запускайте, когда в базе мало пользователей, и порциями: не весь год, а месяц за месяцем.
  5. Если ошибку даёт собственная доработка, передайте её программисту: обработку нужно переписать так, чтобы она читала данные порциями, а не одной выборкой.

Если отчёты формируются не с ошибкой, а просто очень долго, это смежная проблема. Порядок её диагностики мы разбирали в статье 1С тормозит: что делать.

Недостаточно памяти при обновлении 1С 8.3

Обновление конфигурации — одна из самых нагруженных операций. Конфигуратор сравнивает и объединяет конфигурации, строит новую структуру базы, а в файловом варианте ещё и сам реструктурирует данные. Для типовых конфигураций вроде ERP, КА или УТ на 32-разрядной платформе памяти часто не хватает.

Порядок действий:

  1. Сделайте резервную копию базы до начала обновления. Если обновление прервётся посреди реструктуризации, база может оказаться повреждённой. Среди последствий бывает и ошибка формата потока.
  2. Закройте на компьютере все лишние программы: браузер с десятками вкладок, другие сеансы 1С.
  3. Запускайте конфигуратор 64-разрядной платформы. Проверьте это в «Диспетчере задач» так же, как для клиента.
  4. Проверьте свободное место на системном диске и включённый файл подкачки. Конфигуратор пишет временные файлы, а отключённая подкачка резко сокращает объём, который Windows может выделить программам.
  5. Если ошибка возникает при обновлении клиент-серверной базы, помните, что реструктуризация идёт на сервере 1С и в СУБД. Смотрите память сервера по разделу ниже.
  6. Если обновление всё равно падает, обновляйте на более мощной машине: например, скопируйте файловую базу на компьютер с большим объёмом ОЗУ, обновите её там и верните обратно.

После неудачного обновления не запускайте его повторно на «живой» базе, пока не убедились, что она открывается и данные на месте. Надёжнее восстановить копию и повторить обновление в исправленных условиях.

«На сервере недостаточно памяти»: рабочие процессы rphost

На сервере 1С за работу пользователей отвечают рабочие процессы rphost.exe. Кроме них в кластере работают агент сервера ragent.exe и менеджер кластера rmngr.exe. Каждый rphost обслуживает часть сеансов и держит в памяти кэши, данные запросов и временные таблицы. Со временем процесс может разрастись до многих гигабайт.

Причины ошибки на сервере обычно такие:

  • 32-разрядный сервер 1С. Всё то же ограничение адресного пространства, только на каждый rphost. На старых установках это встречается до сих пор. Сервер 1С на 64-разрядной Windows должен быть 64-разрядным.
  • Тяжёлый вызов. Один пользователь запустил отчёт или обработку, которой нужен огромный объём памяти, и она забрала весь лимит.
  • Утечка памяти. Процесс rphost растёт день за днём и не освобождает память. Бывает из-за ошибок в доработках, внешних компонентах или в конкретной версии платформы.
  • Общая нехватка ОЗУ. На одном сервере работают 1С, СУБД, терминальные сеансы пользователей и антивирус. Каждый по отдельности укладывается в ресурсы, но вместе им недостаточно памяти, зачастую и процессора.

Лимиты памяти в консоли кластера

В консоли «Администрирование серверов 1С Предприятия» есть параметры, которые ограничивают память рабочих процессов. Часть из них задаётся в свойствах кластера, часть — в свойствах рабочего сервера. Названия могут немного отличаться в зависимости от версии платформы, но смысл у них такой:

ПараметрГде задаётсяЧто делает
Допустимый объём памятиСвойства кластераЕсли процесс rphost превышает этот объём дольше заданного интервала, кластер переводит его в выключенные и запускает новый
Интервал превышения допустимого объёма памятиСвойства кластераСколько времени процессу разрешено быть выше допустимого объёма
Интервал перезапускаСвойства кластераПлановый перезапуск рабочих процессов через заданное время работы
Критический объём памяти процессовСвойства рабочего сервераПорог суммарной памяти всех процессов сервера, при превышении которого кластер начинает прерывать самые тяжёлые вызовы
Безопасный расход памяти за один вызовСвойства рабочего сервераОграничение на память одного серверного вызова. Если вызов его превышает, он прерывается с ошибкой, а не убивает весь процесс

Лимиты стоит выставлять осознанно. Слишком низкие дадут частые ошибки у пользователей на обычных отчётах. Нулевые или слишком высокие позволят одному процессу утилизировать всю память сервера, и тогда пострадают все. Ориентируйтесь на объём ОЗУ сервера за вычетом памяти, которая нужна СУБД и операционной системе.

Утечки и перезапуск рабочих процессов

Если процесс rphost растёт от дня к дню и не уменьшается даже ночью, когда пользователей нет, это похоже на утечку. Что делать:

  1. Предупредите пользователей: при перезапуске процесса обслуживаемые им сеансы будут прерваны.
  2. В консоли кластера откройте список рабочих процессов и посмотрите столбец с занимаемой памятью. Найдите процесс, который заметно больше остальных.
  3. Выключите этот процесс из консоли. Кластер запустит вместо него новый. Если консоль недоступна, перезапустите службу «Агент сервера 1С:Предприятия 8.3» в нерабочее время.
  4. Настройте автоматический перезапуск: допустимый объём памяти и интервал перезапуска в свойствах кластера. Это не вылечит утечку, но не даст ей копиться и позволит дольше жить без перезапуска всего сервера.
  5. Найдите источник. Посмотрите, какие сеансы и операции выполнялись в раздувшемся процессе. Помогает технологический журнал 1С. Если утечка появилась после обновления платформы или установки новой доработки, проверьте их в первую очередь.

Одноразовый перезапуск без поиска причины не решает задачу. Если процесс раздувается каждую неделю, через неделю ошибка вернётся.

СУБД на том же сервере

Частая скрытая причина — MS SQL Server на одной машине с сервером 1С. По умолчанию SQL Server не ограничен по памяти и постепенно забирает почти всю ОЗУ под свой кэш. Тогда процессам 1С физически остаётся мало места. Ограничьте память SQL Server параметром «Максимальный размер памяти сервера» (max server memory) в свойствах сервера в SQL Server Management Studio. У PostgreSQL память задаётся параметрами в конфигурационном файле, и её расход надо учитывать при расчёте общего объёма.

Что смотреть в «Диспетчере задач»

«Диспетчер задач» есть и на рабочем месте, и на сервере. Он быстро показывает, упираетесь вы в процесс или в систему.

Что видитеВероятная причинаЧто делать
Процесс 1С помечен «(32 бита)», свободной памяти многоУпор в адресное пространство 32-разрядного процессаПоставить 64-разрядный клиент или конфигуратор
Вкладка «Производительность»: память занята на 90% и вышеНе хватает ОЗУ всей системеНайти, кто её занимает; при необходимости добавить память
Один rphost занимает намного больше остальныхТяжёлый вызов или утечкаВыяснить, что в нём выполняется; перезапустить процесс; настроить лимиты
Больше всех памяти у sqlservr.exeSQL Server забрал память под кэшОграничить max server memory
Много процессов 1cv8c.exe от разных пользователейТерминальный сервер, клиенты пользователей складываютсяПосчитать память на пользователя; закрыть «забытые» сеансы
Выделенная память близка к пределу, файл подкачки маленький или отключёнСистеме некуда выделять памятьВключить файл подкачки с автоматическим размером

На вкладке «Производительность» → «Память» полезны две строки: «Используется» и «Выделено». Вторая показывает, сколько памяти обещано программам с учётом файла подкачки. Если она подходит к пределу, программы начнут получать отказы, даже если физическая память ещё не закончилась.

Когда пора добавлять оперативную память

Докупать память имеет смысл, если выполняются все условия:

  • клиент и сервер 1С уже 64-разрядные;
  • утечек нет: процессы не растут бесконечно, после перезапуска картина не меняется;
  • память СУБД ограничена разумно;
  • в рабочее время занятая память стабильно держится выше 85–90%, а система активно пользуется файлом подкачки;
  • нехватка возникает на обычной работе, а не на одном редком отчёте.

Если сервер один на всё — 1С, СУБД и терминальные сеансы пользователей, — потребность в памяти растёт с каждым новым сотрудником. Как прикинуть объём ОЗУ под нужное число пользователей, мы разбирали в статье сервер для 1С на 5, 10, 20 пользователей.

Иногда проще не наращивать свой сервер, а переехать туда, где объём памяти меняется по заявке. Например, при аренде терминального сервера с 1С ресурсы подбираются под нагрузку, а администрирование сервера входит в аренду.

Краткий порядок действий

  1. Определите, где ошибка: на клиенте или на сервере, файловая база или клиент-серверная.
  2. Проверьте разрядность процесса 1С в «Диспетчере задач».
  3. Если процесс 32-разрядный — установите 64-разрядную платформу той же версии.
  4. Если ошибка на конкретном отчёте — сузьте период и отборы, формируйте частями.
  5. Перед обновлением конфигурации сделайте копию и используйте 64-разрядный конфигуратор.
  6. На сервере проверьте память rphost, лимиты в консоли кластера и память СУБД.
  7. Только после этого решайте, нужна ли дополнительная ОЗУ.

Частые вопросы

В компьютере 16 ГБ памяти, а 1С пишет «Недостаточно памяти». Почему?

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

Поможет ли увеличение файла подкачки?

Если файл подкачки отключён или очень мал, включение поможет системе выделять память программам. Упор 32-разрядного процесса в собственный предел файл подкачки не снимает. И он не заменяет оперативную память: при активной подкачке 1С будет работать медленно.

Можно ли работать 64-разрядным клиентом с 32-разрядным сервером 1С?

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

Безопасно ли перезапускать rphost днём?

Сеансы, которые обслуживал процесс, будут прерваны, а несохранённые данные пользователей потеряны. Лучше делать это в нерабочее время или предупредить сотрудников. Для регулярной защиты от раздувания используйте лимиты и плановый перезапуск в настройках кластера.

Ошибка появляется только у одного пользователя. Это сервер или клиент?

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

Обновление упало с ошибкой памяти. База теперь испорчена?

Не обязательно, но проверить нужно. Попробуйте открыть базу в режиме предприятия. Если есть сомнения, восстановите резервную копию, сделанную перед обновлением, и повторите обновление в 64-разрядном конфигураторе.