Почему 1С Предприятие пишет «Недостаточно памяти» и как вернуть базе нормальную работу
Содержание
Ошибка «Недостаточно памяти
» в 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С, в окне выбора баз выделите нужную.
- Нажмите
Изменить. - Пройдите мастер до последней страницы, где задаются режим запуска и версия.
- В поле «Разрядность» выберите
64 (x86-64)илиПриоритет 64 (x86-64). Второй вариант запустит 32-битную платформу, если 64-битной нет. - Нажмите
Готовои перезапустите базу.
Полезные параметры командной строки
На той же странице мастера есть поле «Дополнительные параметры запуска». Туда пишут ключи, которые срабатывают при каждом входе:
/ClearCache— очистка клиентского кэша при запуске;/AppAutoCheckVersion-— отключает автоматический выбор версии платформы, если запускается не та, что нужна.
Конфигуратор тоже бывает 32-битным и падает на загрузке больших .dt и .cf. Для него действует та же настройка разрядности базы.
Файл подкачки Windows: какой размер поставить
Когда физическая память занята, Windows выносит редко используемые страницы на диск. Если файла подкачки нет или он маленький, система просто отказывает в выделении памяти, и 1С получает ошибку.
Как настроить:
- Нажмите
Win + R, введитеSystemPropertiesPerformanceи нажмите Enter. Откроется окно «Параметры быстродействия». - Перейдите на вкладку «Дополнительно», в блоке «Виртуальная память» нажмите
Изменить. - Снимите флажок автоматического выбора объёма.
- Выберите системный диск, отметьте «Указать размер».
- Задайте исходный и максимальный размер, нажмите
Задать, затемОК. - Перезагрузите компьютер.
Ориентиры по размеру:
| ОЗУ компьютера | Исходный, МБ | Максимальный, МБ |
|---|---|---|
| 4 ГБ | 4096 | 8192 |
| 8 ГБ | 8192 | 12288 |
| 16 ГБ и больше | 8192 | 16384 |
Это ориентировочные значения для рабочего места бухгалтера. На терминальном сервере файл подкачки держите не меньше объёма ОЗУ и следите за свободным местом на диске.
Файл подкачки не заменяет память. Если ОЗУ постоянно занята на 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С у этого пользователя.
- Нажмите
Win + R, введите%APPDATA%\1C\1cv8и нажмите Enter. - Удалите папки с именами вида
a1b2c3d4-…— это кэши отдельных баз. - Повторите то же для
%LOCALAPPDATA%\1C\1cv8. - Очистите временную папку:
%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 ГБ, апгрейд памяти без переустановки ОС бесполезен;
- 🔍 поддерживает ли материнская плата нужный объём и тип модулей;
- 🔍 не перегружен ли сервер другими задачами — антивирусом, резервным копированием в рабочее время, второй СУБД.