Ошибка «Недостаточно памяти» в 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-разрядную «по умолчанию», база за годы выросла, и однажды перестаёт формироваться годовой отчёт или не проходит обновление. Диспетчер задач при этом показывает, что свободной памяти много. Это верный признак недостаточной разрядности программы и упора в адресное пространство процесса.
Как понять разрядность клиента
- Откройте «Диспетчер задач» (Ctrl+Shift+Esc) и запустите 1С.
- На вкладке «Процессы» у 32-разрядных программ к имени добавляется пометка «(32 бита)».
- Для точности перейдите на вкладку «Подробности», щёлкните правой кнопкой по заголовку таблицы, выберите «Выбрать столбцы» и включите столбец «Платформа». Для
1cv8c.exeили1cv8.exeтам будет указано «32 бита» или «64 бита». - Можно проверить и по папке установки: 32-разрядная платформа обычно стоит в
C:\Program Files (x86)\1cv8\, 64-разрядная — вC:\Program Files\1cv8\. На одном компьютере могут стоять обе, и запускаться может любая из них.
Как перейти на 64-разрядный клиент
- Убедитесь, что сама Windows 64-разрядная: «Параметры → Система → О системе», строка «Тип системы». На 32-разрядной Windows поставить 64-разрядную 1С нельзя.
- Скачайте дистрибутив 64-разрядной платформы той же версии, что и у остальных пользователей и сервера. В клиент-серверном варианте версия клиента должна совпадать с версией сервера 1С.
- Установите платформу. 32-разрядную можно оставить, если она нужна для старых внешних компонент или торгового оборудования.
- В окне запуска 1С откройте свойства базы («Изменить») и на странице с параметрами запуска укажите нужную разрядность, если такое поле есть в вашей версии. Иначе стартовое окно может продолжать запускать 32-разрядную версию.
- Запустите базу и снова проверьте в «Диспетчере задач», что процесс работает как 64-разрядный.
Учтите: некоторые старые внешние компоненты (драйверы оборудования, библиотеки обмена) существуют только в 32-разрядном варианте. Перед массовым переходом проверьте на одном рабочем месте, что печать чеков, сканеры и обмены работают.
Тяжёлые отчёты и обработки
Даже 64-разрядному клиенту можно задать операцию, для которой не хватит памяти. Типичные примеры:
- универсальный отчёт или отчёт на СКД без отборов за несколько лет;
- оборотно-сальдовая ведомость с детализацией по всем субконто и документам;
- выгрузка большого табличного документа в Excel или PDF;
- внешние обработки, которые загружают в память всю таблицу целиком, например групповое перепроведение или выгрузка данных за всё время;
- обмен данными с большим пакетом сообщений.
Что делать:
- Сузьте период и добавьте отборы: по организации, складу, контрагенту.
- Уберите лишнюю детализацию и группировки. Отчёт до уровня документов за год почти никто не читает целиком.
- Формируйте отчёт частями, например по кварталам, и сохраняйте результаты отдельно.
- Длительные обработки запускайте, когда в базе мало пользователей, и порциями: не весь год, а месяц за месяцем.
- Если ошибку даёт собственная доработка, передайте её программисту: обработку нужно переписать так, чтобы она читала данные порциями, а не одной выборкой.
Если отчёты формируются не с ошибкой, а просто очень долго, это смежная проблема. Порядок её диагностики мы разбирали в статье 1С тормозит: что делать.
Недостаточно памяти при обновлении 1С 8.3
Обновление конфигурации — одна из самых нагруженных операций. Конфигуратор сравнивает и объединяет конфигурации, строит новую структуру базы, а в файловом варианте ещё и сам реструктурирует данные. Для типовых конфигураций вроде ERP, КА или УТ на 32-разрядной платформе памяти часто не хватает.
Порядок действий:
- Сделайте резервную копию базы до начала обновления. Если обновление прервётся посреди реструктуризации, база может оказаться повреждённой. Среди последствий бывает и ошибка формата потока.
- Закройте на компьютере все лишние программы: браузер с десятками вкладок, другие сеансы 1С.
- Запускайте конфигуратор 64-разрядной платформы. Проверьте это в «Диспетчере задач» так же, как для клиента.
- Проверьте свободное место на системном диске и включённый файл подкачки. Конфигуратор пишет временные файлы, а отключённая подкачка резко сокращает объём, который Windows может выделить программам.
- Если ошибка возникает при обновлении клиент-серверной базы, помните, что реструктуризация идёт на сервере 1С и в СУБД. Смотрите память сервера по разделу ниже.
- Если обновление всё равно падает, обновляйте на более мощной машине: например, скопируйте файловую базу на компьютер с большим объёмом ОЗУ, обновите её там и верните обратно.
После неудачного обновления не запускайте его повторно на «живой» базе, пока не убедились, что она открывается и данные на месте. Надёжнее восстановить копию и повторить обновление в исправленных условиях.
«На сервере недостаточно памяти»: рабочие процессы rphost
На сервере 1С за работу пользователей отвечают рабочие процессы rphost.exe. Кроме них в кластере работают агент сервера ragent.exe и менеджер кластера rmngr.exe. Каждый rphost обслуживает часть сеансов и держит в памяти кэши, данные запросов и временные таблицы. Со временем процесс может разрастись до многих гигабайт.
Причины ошибки на сервере обычно такие:
- 32-разрядный сервер 1С. Всё то же ограничение адресного пространства, только на каждый rphost. На старых установках это встречается до сих пор. Сервер 1С на 64-разрядной Windows должен быть 64-разрядным.
- Тяжёлый вызов. Один пользователь запустил отчёт или обработку, которой нужен огромный объём памяти, и она забрала весь лимит.
- Утечка памяти. Процесс rphost растёт день за днём и не освобождает память. Бывает из-за ошибок в доработках, внешних компонентах или в конкретной версии платформы.
- Общая нехватка ОЗУ. На одном сервере работают 1С, СУБД, терминальные сеансы пользователей и антивирус. Каждый по отдельности укладывается в ресурсы, но вместе им недостаточно памяти, зачастую и процессора.
Лимиты памяти в консоли кластера
В консоли «Администрирование серверов 1С Предприятия» есть параметры, которые ограничивают память рабочих процессов. Часть из них задаётся в свойствах кластера, часть — в свойствах рабочего сервера. Названия могут немного отличаться в зависимости от версии платформы, но смысл у них такой:
| Параметр | Где задаётся | Что делает |
|---|---|---|
| Допустимый объём памяти | Свойства кластера | Если процесс rphost превышает этот объём дольше заданного интервала, кластер переводит его в выключенные и запускает новый |
| Интервал превышения допустимого объёма памяти | Свойства кластера | Сколько времени процессу разрешено быть выше допустимого объёма |
| Интервал перезапуска | Свойства кластера | Плановый перезапуск рабочих процессов через заданное время работы |
| Критический объём памяти процессов | Свойства рабочего сервера | Порог суммарной памяти всех процессов сервера, при превышении которого кластер начинает прерывать самые тяжёлые вызовы |
| Безопасный расход памяти за один вызов | Свойства рабочего сервера | Ограничение на память одного серверного вызова. Если вызов его превышает, он прерывается с ошибкой, а не убивает весь процесс |
Лимиты стоит выставлять осознанно. Слишком низкие дадут частые ошибки у пользователей на обычных отчётах. Нулевые или слишком высокие позволят одному процессу утилизировать всю память сервера, и тогда пострадают все. Ориентируйтесь на объём ОЗУ сервера за вычетом памяти, которая нужна СУБД и операционной системе.
Утечки и перезапуск рабочих процессов
Если процесс rphost растёт от дня к дню и не уменьшается даже ночью, когда пользователей нет, это похоже на утечку. Что делать:
- Предупредите пользователей: при перезапуске процесса обслуживаемые им сеансы будут прерваны.
- В консоли кластера откройте список рабочих процессов и посмотрите столбец с занимаемой памятью. Найдите процесс, который заметно больше остальных.
- Выключите этот процесс из консоли. Кластер запустит вместо него новый. Если консоль недоступна, перезапустите службу «Агент сервера 1С:Предприятия 8.3» в нерабочее время.
- Настройте автоматический перезапуск: допустимый объём памяти и интервал перезапуска в свойствах кластера. Это не вылечит утечку, но не даст ей копиться и позволит дольше жить без перезапуска всего сервера.
- Найдите источник. Посмотрите, какие сеансы и операции выполнялись в раздувшемся процессе. Помогает технологический журнал 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.exe | SQL Server забрал память под кэш | Ограничить max server memory |
| Много процессов 1cv8c.exe от разных пользователей | Терминальный сервер, клиенты пользователей складываются | Посчитать память на пользователя; закрыть «забытые» сеансы |
| Выделенная память близка к пределу, файл подкачки маленький или отключён | Системе некуда выделять память | Включить файл подкачки с автоматическим размером |
На вкладке «Производительность» → «Память» полезны две строки: «Используется» и «Выделено». Вторая показывает, сколько памяти обещано программам с учётом файла подкачки. Если она подходит к пределу, программы начнут получать отказы, даже если физическая память ещё не закончилась.
Когда пора добавлять оперативную память
Докупать память имеет смысл, если выполняются все условия:
- клиент и сервер 1С уже 64-разрядные;
- утечек нет: процессы не растут бесконечно, после перезапуска картина не меняется;
- память СУБД ограничена разумно;
- в рабочее время занятая память стабильно держится выше 85–90%, а система активно пользуется файлом подкачки;
- нехватка возникает на обычной работе, а не на одном редком отчёте.
Если сервер один на всё — 1С, СУБД и терминальные сеансы пользователей, — потребность в памяти растёт с каждым новым сотрудником. Как прикинуть объём ОЗУ под нужное число пользователей, мы разбирали в статье сервер для 1С на 5, 10, 20 пользователей.
Иногда проще не наращивать свой сервер, а переехать туда, где объём памяти меняется по заявке. Например, при аренде терминального сервера с 1С ресурсы подбираются под нагрузку, а администрирование сервера входит в аренду.
Краткий порядок действий
- Определите, где ошибка: на клиенте или на сервере, файловая база или клиент-серверная.
- Проверьте разрядность процесса 1С в «Диспетчере задач».
- Если процесс 32-разрядный — установите 64-разрядную платформу той же версии.
- Если ошибка на конкретном отчёте — сузьте период и отборы, формируйте частями.
- Перед обновлением конфигурации сделайте копию и используйте 64-разрядный конфигуратор.
- На сервере проверьте память rphost, лимиты в консоли кластера и память СУБД.
- Только после этого решайте, нужна ли дополнительная ОЗУ.
Частые вопросы
В компьютере 16 ГБ памяти, а 1С пишет «Недостаточно памяти». Почему?
Скорее всего, запущен 32-разрядный клиент 1С. Он не может использовать больше нескольких гигабайт, сколько бы памяти ни было в компьютере. Проверьте разрядность процесса в «Диспетчере задач» и установите 64-разрядную платформу.
Поможет ли увеличение файла подкачки?
Если файл подкачки отключён или очень мал, включение поможет системе выделять память программам. Упор 32-разрядного процесса в собственный предел файл подкачки не снимает. И он не заменяет оперативную память: при активной подкачке 1С будет работать медленно.
Можно ли работать 64-разрядным клиентом с 32-разрядным сервером 1С?
Разрядность клиента и сервера может отличаться, важно совпадение версий платформы. Но сам 32-разрядный сервер 1С ограничен по памяти каждого рабочего процесса, поэтому при ошибках на сервере его стоит перевести на 64-разрядную версию.
Безопасно ли перезапускать rphost днём?
Сеансы, которые обслуживал процесс, будут прерваны, а несохранённые данные пользователей потеряны. Лучше делать это в нерабочее время или предупредить сотрудников. Для регулярной защиты от раздувания используйте лимиты и плановый перезапуск в настройках кластера.
Ошибка появляется только у одного пользователя. Это сервер или клиент?
Чаще клиент: у этого пользователя 32-разрядная платформа, он формирует слишком большой отчёт или у него на компьютере мало свободной памяти. Если же ошибка приходит от сервера, скорее всего, сработал лимит памяти на один вызов именно для его операции.
Обновление упало с ошибкой памяти. База теперь испорчена?
Не обязательно, но проверить нужно. Попробуйте открыть базу в режиме предприятия. Если есть сомнения, восстановите резервную копию, сделанную перед обновлением, и повторите обновление в 64-разрядном конфигураторе.