Почему 1С Предприятие пишет «Недостаточно памяти» и как вернуть базе нормальную работу

· 10 мин

Содержание

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

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

СпособКогда помогаетРиски
64-разрядный клиентОшибка на тяжёлых отчётах, загрузке файлов, в КонфигуратореНет, если установлена 64-битная платформа той же версии
Файл подкачкиОшибка при нехватке физической ОЗУ, на терминальном сервереНет; нужен свободный диск
Очистка кэшаОшибка после обновления, «раздутые» папки пользователяСброс пользовательских настроек окон не происходит, но первый запуск дольше
Правка кода или отчётаОшибка в одном и том же месте у всехНужен разработчик, работа в копии базы
Настройки кластера и СУБДКлиент-серверная база, падают rphostПерезапуск процессов обрывает сеансы
Добавить ОЗУПамять занята под 100% постоянноЗатраты

Откуда берётся нехватка памяти в 1С 8.3

Сообщение одно, а источников у него несколько. Сначала определите, где кончилась память: в клиенте на компьютере пользователя, в рабочем процессе сервера 1С или в самой Windows.

Типичные тексты, которые видит пользователь:

  • Недостаточно памяти — короткое окно в клиенте, обычно при формировании отчёта или печати;
  • Недостаточно памяти для получения результата запроса — запрос вернул больше строк, чем помещается в процесс;
  • Out of memory — то же самое в англоязычной части сообщения;
  • обрыв сеанса с сообщением о разрыве соединения с сервером — часто это рабочий процесс, который перезапустился по лимиту памяти.

Основные причины:

  • 🧩 32-разрядный клиент. Процесс ограничен адресным пространством около 2–4 ГБ. Свободные 16 ГБ в системе ему не помогут.
  • 💾 Мал или отключён файл подкачки. Windows не может выделить память сверх физической ОЗУ и отказывает процессу.
  • 📊 Тяжёлый отчёт или обработка. Отчёт за несколько лет без отборов, выгрузка всей таблицы в ТаблицаЗначений, загрузка Excel-файла на сотни тысяч строк.
  • 🔁 Утечка памяти в коде. Память растёт с каждым действием и не освобождается до закрытия программы.
  • 🗂 Повреждённый или раздутый кэш после обновления платформы или конфигурации.
  • 🖥 Лимиты кластера и аппетит СУБД. На одном сервере SQL Server забирает всю ОЗУ, и рабочим процессам 1С не остаётся.

Быстрый способ сузить круг — сопоставить симптом с причиной.

Диагностика: выберите симптом

Как запустить 1С в 64-разрядном режиме через параметры запуска

Начните с проверки. Откройте Диспетчер задач, вкладку «Процессы». У 32-разрядной программы рядом с именем стоит пометка «(32 бита)». Если рядом с «1С:Предприятие» она есть — причина найдена с большой вероятностью.

Установите 64-разрядную платформу

64-разрядный клиент ставится отдельным дистрибутивом платформы той же версии. Ищите в комплекте поставки пакет для 64-разрядной Windows. После установки в папке C:\Program Files\1cv8\<номер версии>\bin появится 64-битный 1cv8.exe. 32-битная платформа живёт в C:\Program Files (x86)\1cv8\.

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

Укажите разрядность в свойствах базы

  1. Запустите 1С, в окне выбора баз выделите нужную.
  2. Нажмите Изменить.
  3. Пройдите мастер до последней страницы, где задаются режим запуска и версия.
  4. В поле «Разрядность» выберите 64 (x86-64) или Приоритет 64 (x86-64). Второй вариант запустит 32-битную платформу, если 64-битной нет.
  5. Нажмите Готово и перезапустите базу.

Полезные параметры командной строки

На той же странице мастера есть поле «Дополнительные параметры запуска». Туда пишут ключи, которые срабатывают при каждом входе:

  • /ClearCache — очистка клиентского кэша при запуске;
  • /AppAutoCheckVersion- — отключает автоматический выбор версии платформы, если запускается не та, что нужна.

Конфигуратор тоже бывает 32-битным и падает на загрузке больших .dt и .cf. Для него действует та же настройка разрядности базы.

Файл подкачки Windows: какой размер поставить

Когда физическая память занята, Windows выносит редко используемые страницы на диск. Если файла подкачки нет или он маленький, система просто отказывает в выделении памяти, и 1С получает ошибку.

Как настроить:

  1. Нажмите Win + R, введите SystemPropertiesPerformance и нажмите Enter. Откроется окно «Параметры быстродействия».
  2. Перейдите на вкладку «Дополнительно», в блоке «Виртуальная память» нажмите Изменить.
  3. Снимите флажок автоматического выбора объёма.
  4. Выберите системный диск, отметьте «Указать размер».
  5. Задайте исходный и максимальный размер, нажмите Задать, затем ОК.
  6. Перезагрузите компьютер.

Ориентиры по размеру:

ОЗУ компьютераИсходный, МБМаксимальный, МБ
4 ГБ40968192
8 ГБ819212288
16 ГБ и больше819216384

Это ориентировочные значения для рабочего места бухгалтера. На терминальном сервере файл подкачки держите не меньше объёма ОЗУ и следите за свободным местом на диске.

Файл подкачки не заменяет память. Если ОЗУ постоянно занята на 90–100%, подкачка спасёт от ошибки, но 1С будет работать медленно. Решение в таком случае — память или разгрузка сервера.

Посмотреть, сколько памяти реально занято, удобно в «Мониторе ресурсов»: Win + R, команда resmon, вкладка «Память». Колонка «Рабочий набор» у процессов 1cv8.exe, 1cv8c.exe и rphost.exe покажет, кто съел память.

Утечки памяти в конфигурации: как найти и что исправить

Если ошибка возникает в одном месте у всех пользователей, дело не в компьютере. Тут нужна диагностика со стороны разработчика или администратора базы.

Признаки утечки

  • 📈 память процесса растёт после каждого повторения одной операции и не возвращается;
  • ⏳ после перезапуска программы всё работает, через несколько часов снова ошибка;
  • 🔂 проблема воспроизводится на определённой обработке или при обмене.

Технологический журнал

Платформа умеет фиксировать утечки событием LEAKS. Для этого в каталоге conf платформы, например C:\Program Files\1cv8\conf\, создают файл logcfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1C_logs" history="24">
    <event>
      <eq property="name" value="LEAKS"/>
    </event>
    <property name="all"/>
  </log>
  <leaks collect="1">
    <point call="client"/>
    <point call="server"/>
  </leaks>
</config>

Журнал начинает писаться через минуту после сохранения файла, перезапуск не нужен. В записях LEAKS видно, в каком модуле и строке создан объект, который не освободился.

Технологический журнал быстро растёт и нагружает диск. Включайте его на время диагностики и удаляйте logcfg.xml сразу после сбора данных. Папку для логов выбирайте на диске со свободным местом.

Что обычно исправляют в коде

  • Выгрузка вместо выборки. Запрос.Выполнить().Выгрузить() тянет все строки в память. Для обработки миллионов строк используйте Выбрать() и обход выборки.
  • Порции. Обработку большой таблицы делят на части, например по 10 000 записей, с записью результата после каждой порции.
  • Циклические ссылки. Объект хранит ссылку на структуру, а структура на объект. Такая пара не освобождается автоматически. После работы обнуляйте поле: Структура.Владелец = Неопределено.
  • Периоды и отборы в отчётах. Отчёт на СКД за пять лет без группировки выводит миллионы строк табличного документа. Ограничьте период, добавьте группировку или выводите итоги без детальных записей.

Изменения в типовой конфигурации делайте в расширении и проверяйте сначала в копии базы.

Очистка кэша и временных файлов 1С

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

Способ 1. Параметр /ClearCache

Самый безопасный вариант. Добавьте /ClearCache в «Дополнительные параметры запуска» базы, войдите один раз, затем уберите параметр, чтобы не чистить кэш при каждом входе.

Способ 2. Удаление папок вручную

  1. Закройте все окна 1С у этого пользователя.
  2. Нажмите Win + R, введите %APPDATA%\1C\1cv8 и нажмите Enter.
  3. Удалите папки с именами вида a1b2c3d4-… — это кэши отдельных баз.
  4. Повторите то же для %LOCALAPPDATA%\1C\1cv8.
  5. Очистите временную папку: %TEMP%, файлы, которые не заняты другими программами.

Файлы ibases.v8i и 1CEStart.cfg не трогайте: в них список баз и настройки запуска.

Для терминального сервера то же можно сделать пакетным файлом для конкретного пользователя:

@echo off
rem Запускать, когда у пользователя закрыты все сеансы 1С
for /d %%D in ("%APPDATA%\1C\1cv8\*-*") do rd /s /q "%%D"
for /d %%D in ("%LOCALAPPDATA%\1C\1cv8\*-*") do rd /s /q "%%D"
echo Кэш 1С очищен

Маска *-* выбирает только папки с GUID в имени: служебные файлы в корне каталога останутся на месте.

Сеансовые данные сервера

В клиент-серверной базе на сервере тоже копятся временные файлы: каталог snccntx в папке кластера. Его чистят только при остановленной службе «Агент сервера 1С:Предприятия».

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

Память на сервере 1С и СУБД

В клиент-серверном варианте ошибку часто вызывает не компьютер пользователя, а рабочий процесс rphost.exe. В консоли администрирования серверов в свойствах кластера есть параметры, которые ограничивают память:

  • «Допустимый объём памяти» — сколько может занимать рабочий процесс до того, как кластер начнёт его заменять;
  • «Интервал превышения допустимого объёма памяти» — сколько секунд процесс может держаться выше лимита;
  • «Безопасный расход памяти за один вызов» — порог для одного серверного вызова; при превышении вызов прерывается с ошибкой, а остальные сеансы продолжают работать.

Слишком маленькие значения вызывают ошибки у пользователей на крупных операциях. Слишком большие — позволяют одному сеансу съесть всю память сервера. Меняйте их постепенно, по одному параметру, и наблюдайте за rphost.exe в Мониторе ресурсов.

Отдельная история — SQL Server на той же машине. По умолчанию он забирает почти всю ОЗУ, и 1С остаётся без памяти. Ограничьте его:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- пример для сервера с 64 ГБ ОЗУ: SQL Server получает 40 ГБ
EXEC sp_configure 'max server memory (MB)', 40960;
RECONFIGURE;

Остаток делят между Windows (4–8 ГБ) и рабочими процессами 1С. Для PostgreSQL похожую роль играют параметры shared_buffers и work_mem в postgresql.conf; work_mem выделяется на каждую операцию сортировки, поэтому большое значение при многих пользователях легко съедает память.

Сколько памяти нужно для 1С: требования и апгрейд

Когда все настройки в порядке, а память занята под потолок, остаётся добавить ОЗУ. Ориентиры для 1С 8.3 с интерфейсом «Такси»:

СценарийОЗУ, ориентир
Рабочее место, тонкий клиент, 1–2 базы8 ГБ
Рабочее место, файловая база, тяжёлые отчёты16 ГБ
Терминальный сервер4 ГБ на систему + 0,5–1 ГБ на пользователя
Сервер 1С + СУБД, до 20 пользователей32–64 ГБ

Это ориентировочные цифры. Точная потребность зависит от конфигурации и объёма базы: ERP и крупная УТ требуют заметно больше, чем Бухгалтерия небольшой фирмы.

Перед покупкой проверьте:

  • 🔍 разрядность Windows: 32-битная система видит не больше 4 ГБ, апгрейд памяти без переустановки ОС бесполезен;
  • 🔍 поддерживает ли материнская плата нужный объём и тип модулей;
  • 🔍 не перегружен ли сервер другими задачами — антивирусом, резервным копированием в рабочее время, второй СУБД.
Проверка перед тем, как звать администратора
Выполнено: 0 / 5

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

Поможет ли тонкий клиент вместо толстого?
Да, если база клиент-серверная или опубликована на веб-сервере. Тонкий клиент держит на компьютере меньше данных: тяжёлые запросы выполняются на сервере. В файловой базе выигрыш меньше.
Почему ошибка появляется при печати, а отчёт на экране строится?
При печати и сохранении в PDF или Excel табличный документ копируется ещё раз. Большой документ в 32-битном клиенте может не уместиться. Сохраните отчёт частями или перейдите на 64-битный клиент.
Ошибка возникает при загрузке выгрузки .dt в Конфигураторе. Что делать?
Запустите Конфигуратор в 64-разрядном режиме и освободите место на диске с временной папкой: при загрузке платформа распаковывает данные туда.
Можно ли поставить 64-битную платформу на 32-битную Windows?
Нет. 64-разрядный клиент работает только в 64-битной Windows. Если система 32-битная, начните с её замены.
Помогает ли перезагрузка компьютера?
Временно. Перезагрузка освобождает память, но при утечке или тяжёлом отчёте ошибка вернётся. Используйте её как первую помощь, а не как решение.