При работе пользователей в терминальной среде (RDP) системные администраторы и разработчики часто сталкиваются с ситуацией, когда каждый процесс платформы 1С:Предприятие занимает от 300 до 600 МБ оперативной памяти. При увеличении числа активных пользователей оперативная память сервера быстро заполняется до 90–98%, что приводит к резкому падению производительности, даже если дисковая подсистема и процессор не загружены на 100%. Разберем архитектурные причины такого поведения платформы и практические шаги по оптимизации.
Архитектурные причины потребления памяти в 1С
Проанализируем, почему конфигурация расходует память и почему отключение функциональных опций или прав доступа не уменьшает размер процесса:
Особенности файлового режима (файл 1Cv8.1CD): В файловом варианте при запуске толстого клиента каждый процесс пользователя совмещает функции клиентского приложения, сервера 1С и встроенной СУБД. Процесс считывает индексы, таблицы и кэш метаданных прямо в собственное адресное пространство, потребляя 300–600 МБ.
Кэширование метаданных: Платформа загружает в память внутренние структуры всей конфигурации (описания метаданных, типы, скомпилированные модули), чтобы гарантировать ссылочную целостность и быстрый вызов процедур. Снятие с поддержки или отключение отдельных функциональных опций не выгружает метаданные из ядра платформы.
Фоновые и регламентные задания: В файловой базе регламентные процедуры выполняются в одном из пользовательских сеансов, что вызывает резкий скачкообразный рост используемой памяти именно этим процессом.
Разница между толстым и тонким клиентом: При работе в режиме тонкого клиента с клиент-серверной базой (SQL) процесс на рабочей станции или в сеансе RDP занимает всего 30–60 МБ, так как все вычисления и работа с данными происходят в службах сервера 1С и СУБД.
Способ 1: Переход на тонкий клиент и публикация на веб-сервере
Если база данных остается файловой, но сервер терминалов перегружен, эффективным решением является публикация информационной базы на веб-сервере (IIS или Apache).
Разберем последовательность действий:
Установите веб-сервер (например, IIS или Apache) на сервере, где расположен файл базы данных.
Выполните публикацию базы через меню Конфигуратора: Администрирование > Публикация на веб-сервере.
Настройте подключение пользователей через тонкий клиент 1С по протоколу HTTP/HTTPS вместо RDP-сеансов.
В этом сценарии веб-сервер берет на себя тяжелые операции обращения к файлу 1Cv8.1CD, а клиентские приложения на локальных компьютерах пользователей расходуют минимальный объем ОЗУ (до 50–80 МБ).
Способ 2: Оптимизация динамических списков и запросов в управляемых формах
При использовании управляемых форм важно проконтролировать настройки динамических списков и программного кода:
Проверьте свойство Динамическое считывание данных у всех основных списков справочников и документов. Если свойство отключено, платформа считывает выборку целиком в память сеанса.
Исключите из запросов динамических списков поля с неограниченной длиной и реквизиты с типом ХранилищеЗначения (картинки, файлы, бинарные данные).
В программных модулях заменяйте выгрузку промежуточных результатов в объект ТаблицаЗначений на использование временных таблиц в пакетных запросах.
Принудительно освобождайте память для массивных переменных и коллекций после завершения их обработки:
// Пример корректной очистки тяжелых коллекций в коде
ТаблицаДанных.Очистить();
ТаблицаДанных = Неопределено;
Способ 3: Обслуживание и сжатие файла базы данных
Фрагментация внутри файла 1Cv8.1CD и раздутый кэш могут приводить к утечкам памяти в процессе сеанса. Выполним профилактические процедуры:
Запустите утилиту проверки физической целостности chdbfl.exe (расположена в каталоге bin установленной платформы).
В режиме Конфигуратора откройте Администрирование > Тестирование и исправление... и выполните пункт Сжатие таблиц информационной базы.
Регулярно выполняйте очистку локального кэша конфигураций на терминальном сервере в папках %LocalAppData%\1C\1cv8 и %AppData%\1C\1cv8.
Способ 4: Миграция на клиент-серверный вариант (SQL)
Для стабильной одновременной работы большого количества пользователей оптимальным решением является перевод базы на полноценную СУБД (PostgreSQL или MS SQL Server):
На сервере СУБД жестко ограничьте максимальный объем используемой памяти (Max Server Memory), чтобы база не вытесняла память операционной системы.
Переведите запуск пользователей на режим Тонкий клиент.
При необходимости масштабирования используйте кластеризацию серверов 1С с разделением рабочих процессов по серверам.