1С Ошибка: Недостаточно свободной памяти (Out of Memory) — исправление
- Аварийное завершение фоновых заданий, закрытия месяца или формирования тяжелых отчетов с ошибкой
Недостаточно свободной памяти (Out of Memory). - Рабочий процесс сервера
rphost.exeразрастается в диспетчере задач до десятков гигабайт RAM. - Клиентские сеансы пользователей аварийно завершаются с разрывом соединения с сервером 1С.
- В технологическом журнале 1С фиксируются события
EXCPс контекстомMemory allocation failed.
1. Настройка автоматического перезапуска процессов rphost в кластере 1С
Откройте консоль Администрирование серверов 1С:Предприятия, перейдите в свойства кластера и установите защитные лимиты:
- Допустимый объем памяти рабочих процессов: задайте значение в байтах (например, 80% от объема RAM сервера,
34359738368для 32GB). - Интервал превышения допустимого объема памяти:
20-30 сек. - Количество ИБ на один процесс:
1(для изоляции баз). - Количество соединений на один процесс:
25-50. - Период перезапуска рабочих процессов:
86400 сек(раз в сутки ночью).
2. Переход на 64-битный клиент 1С:Предприятие
Если ошибка возникает на стороне тонкого/толстого клиента при формировании отчета, причиной является 32-битное ограничение адресного пространства (2-3 GB). Установите официальный 64-разрядный клиент 1С:Предприятия на рабочие станции пользователей.
3. Оптимизация тяжелых запросов в коде 1С (BSL)
// НЕПРАВИЛЬНО: Выгрузка миллионов строк в память сервера целиком
Выборка = Запрос.Выполнить().Выгрузить();
// ПРАВИЛЬНО: Потоковая порционная обработка выборки
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Обработка одной записи без переполнения RAM
КонецЦикла;4. Настройка файла технологического журнала (logcfg.xml) для поиска утечки
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log history="24" location="C:\1c_logs\memory">
<event>
<eq property="name" value="MEM"/>
</event>
<property name="all"/>
</log>
</config> Частые вопросы (FAQ)
Почему 32-битный сервер 1С всегда падает с Out of Memory?
32-разрядный процесс rphost принципиально не может адресовать более 2-3 ГБ виртуальной памяти независимо от общего объема RAM на физическом сервере. Решением является только переход на 64-битную платформу 1С.
Что происходит с сеансами пользователей при перезапуске rphost по превышению памяти?
Кластер 1С создает новый процесс rphost, плавно переносит активные сеансы пользователей без обрыва связи (если включена отказоустойчивость), после чего мягко завершает старый процесс с утечкой памяти.
Как очистить кэш метаданных сервера 1С?
Остановите службу '1C:Enterprise 8.3 Server Agent', очистите содержимое папок srvinfo/reg_1541/snccntx* (кэш контекстов) и запустите службу заново.
Помогает ли увеличение файла подкачки (pagefile.sys) при этой ошибке?
Увеличение swap предотвращает аварийный крах всей ОС Windows/Linux, но не спасает от внутренней фрагментации адресного пространства процесса rphost при некорректных алгоритмах BSL.