Сеансовые данные в 1С: Утечки памяти и ошибка превышения объема (rphost)
Механизм сеансовых данных (Session Data)
В клиент-серверной архитектуре 1С рабочий процесс (rphost.exe) хранит временную информацию о контексте каждого подключенного пользователя — это и есть сеансовые данные. Они включают значения параметров сеанса, временные таблицы наборов записей, кэш метаданных и контекст форм. Ошибка «Превышен допустимый объем сеансовых данных» или «Memory limit exceeded» возникает, когда код конфигурации (часто неоптимальный) пытается поместить в память сервера объем данных, превышающий лимиты, заданные администратором кластера, либо исчерпывает всю доступную RAM сервера. Бизнес-риски: аварийное завершение сеанса пользователя, падение процесса rphost (что отключает сразу группу пользователей).
Типы утечек и их локализация
| Вид данных в памяти | Причина разрастания | Как исправить |
|---|---|---|
| Параметры сеанса (Массивы) | Программист запихнул огромную таблицу значений (ТЗ) в параметр сеанса. | Использовать Временное хранилище или сохранять в ИБ. |
| Кэш глобального контекста | Цикличное создание COM-объектов без их очистки (Release). | Рефакторинг кода (освобождение памяти = Неопределено). |
| Серверные вызовы без контекста | Передача огромных массивов между клиентом и сервером. | Оптимизация архитектуры клиент-серверных вызовов. |
Настройка кластера и поиск узких мест
Сценарий 1: Настройка параметров рабочих процессов кластера
Если ошибка возникает не из-за бага, а из-за реального роста нагрузки, нужно настроить перезапуск rphost и лимиты памяти в консоли кластера 1С.
- Откройте «Администрирование серверов 1С Предприятия».
- Откройте свойства Локального кластера.
- Параметр Допустимый объем памяти (Кб): Установите предел (например, 80% от RAM сервера). При превышении кластер перестанет назначать новые сеансы на этот процесс.
- Параметр Безопасный расход памяти за один вызов (Байт): Ограничивает память на 1 запрос (защита от кривого кода).
- Настройте Интервал перезапуска (например, раз в 86400 сек / 24 часа), чтобы очищать фрагментированную память ночью.
Сценарий 2: Поиск виновника через Технологический журнал (ТЖ)
Для отлова транзакции, которая сжирает память, нужен ТЖ.
Настройка logcfg.xml для отслеживания потребления памяти (EXCP и CALL)
<log>
<event>
<eq property="Name" value="EXCP"/>
</event>
<event>
<eq property="Name" value="CALL"/>
<ge property="MemoryPeak" value="500000000"/> <!-- Вызовы более ~500 МБ -->
</event>
<property name="all"/>
</log>Типовые ошибки администраторов
- Попытка решить проблему только добавлением ОЗУ (RAM): Если в коде 1С есть цикл, добавляющий строки в Таблицу Значений до бесконечности, база сожрет и 32 ГБ, и 256 ГБ памяти. Проблема решается в коде.
- Жесткое убивание rphost.exe: Через Task Manager. Это приводит к разрыву соединений всех пользователей, чьи сеансы обслуживались этим процессом (включая тех, кто нормально работал).
Поиск утечек памяти в 1С сродни поиску иголки в стоге сена. Разработчики ITSTM проведут профилирование кода с помощью инструментального замера времени и анализа дампов памяти, локализуют неоптимальные алгоритмы и перепишут их по стандартам 1С (Клиент-Сервер).
Частые вопросы (FAQ)
Влияет ли TempDB (SQL) на сеансовые данные?
Нет. Сеансовые данные живут в оперативной памяти (RAM) сервера 1С:Предприятие (в процессе rphost). В TempDB живут временные таблицы базы данных SQL Server. Это разные уровни.
Где физически хранятся сеансовые данные?
В оперативной памяти сервера приложений 1С. При нехватке памяти или бездействии пользователя часть данных может сбрасываться в файл сеансовых данных (snccntx.dat) в каталоге кластера (snccntx).
Как принудительно очистить сеансовые данные?
Только завершением сеанса пользователя. При закрытии клиента 1С платформа отправляет серверу сигнал на уничтожение контекста, и память (через Garbage Collector платформы) очищается.
Что такое 'Временное хранилище'?
Это специальный механизм платформы (ПоместитьВоВременноеХранилище) для передачи больших объемов данных (файлов, таблиц) между клиентом и сервером. Оно живет независимо от контекста вызова, но привязано к сеансу.