Почему 1С потребляет много оперативной памяти на сервере терминалов и как это исправить

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В терминальных средах (RDP) системные администраторы и специалисты по автоматизации часто сталкиваются с лавинообразным ростом потребления оперативной памяти процессами 1С. Рассмотрим классический сценарий: на сервере с 16 ГБ оперативной памяти работают всего 3–4 пользователя. Каждый из них запускает «тяжелую» конфигурацию (например, Управление торговлей, Бухгалтерия предприятия или Зарплата и управление персоналом) в файловом режиме. При старте сеанс занимает около 1 ГБ ОЗУ, но в процессе работы объем потребляемой памяти вырастает до 4 ГБ на пользователя. В результате сервер быстро исчерпывает свои ресурсы, начинаются жесткие задержки, система активно использует файл подкачки, а пользователи жалуются на медленную работу интерфейса.

В этой статье мы подробно разберем, почему файловая 1С на управляемых формах потребляет так много ОЗУ, проанализируем внутренние механизмы платформы и предложим проверенные методы оптимизации, которые позволят радикально снизить нагрузку на сервер.

Причина 1: Архитектурные особенности «тонкого клиента» в файловом режиме

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

Когда мы запускаем 1С в файловом режиме, сервер приложений 1С отсутствует. Тонкий клиент не может напрямую работать с файлом базы данных 1Cv8.1CD. Чтобы решить эту проблему, платформа вынуждена эмулировать серверную среду непосредственно внутри клиентского процесса на локальной машине или в терминальной сессии пользователя.

Внутри процесса тонкого клиента запускается так называемый «собственный сервер», который берет на себя:

  1. Чтение и запись таблиц базы данных.
  2. Кэширование метаданных всей конфигурации.
  3. Выполнение серверного кода модулей (на клиенте эмулируется контекст выполнения &НаСервере).
  4. Компиляцию управляемых форм.

В результате «тонкий» клиент превращается в полноценного «толстого» гиганта, потребляющего от 1 до 2 ГБ оперативной памяти сразу после авторизации пользователя. Если запустить несколько таких сеансов в одной терминальной среде, память сервера мгновенно исчерпается.

Решение 1: Публикация базы на веб-сервере (IIS или Apache)

Рассмотрим наиболее эффективный способ решения проблемы «лже-тонкого» клиента — публикацию файловой базы на веб-сервере. Это действие превращает тонкий клиент в по-настоящему легкое приложение.

При публикации базы на веб-сервере (например, под управлением IIS или Apache) вся логика работы с СУБД и кэшем метаданных переносится в процессы веб-сервера (w3wp.exe или httpd.exe). Тонкие клиенты подключаются к базе по протоколу HTTP или HTTPS.

Посмотрим, как меняется распределение памяти в этой схеме:

  1. Тонкий клиент пользователя занимается исключительно отрисовкой интерфейса и обработкой клиентского кода. Потребление памяти одной сессией снижается до 100–150 МБ.
  2. Процессы веб-сервера берут на себя основную нагрузку. Но самое главное — веб-сервер эффективно разделяет общий кэш конфигурации между всеми активными пользователями. Вместо того чтобы хранить три копии метаданных по 1 ГБ для трех пользователей, сервер хранит один общий кэш.

Для настройки публикации выполним следующие шаги:

  1. Установим веб-сервер IIS (встроенная роль Windows Server) или установим Apache.
  2. Запустим Конфигуратор 1С от имени Администратора.
  3. Перейдем в меню Администрирование -> Публикация на веб-сервере....
  4. Укажем имя публикации, выберем веб-сервер и каталог для размещения файлов публикации.
  5. Нажмем кнопку Опубликовать.
  6. В окне запуска 1С у пользователей заменим тип подключения с «На данном компьютере или в локальной сети» на «На веб-сервере» и укажем URL-адрес публикации.

Причина 2: Размер конфигурации и загрузка метаданных в ОЗУ

Разберем еще один важный нюанс. При запуске сеанса платформа 1С обязана полностью загрузить в оперативную память структуру метаданных конфигурации. Это необходимо для того, чтобы в любой момент времени при вызове процедур или открытии форм система не тратила время на чтение диска.

Если мы выгрузим конфигурацию в файл 1Cv8.cf и увидим, что его размер составляет, например, 800 МБ, то открытый сеанс гарантированно потребует не менее этого объема ОЗУ только под саму конфигурацию, без учета обрабатываемых данных. Тяжелые современные конфигурации содержат огромное количество объектов метаданных, что физически не позволяет им работать на минимальных ресурсах.

Решение 2: Оптимизация полнотекстового поиска и фоновых заданий

Часто скрытой причиной резкого роста потребления памяти до 3–4 ГБ за сеанс является неконтролируемое выполнение фоновых и регламентных заданий в файловом режиме.

Поскольку выделенного сервера приложений нет, выполнение регламентных заданий запускается внутри первого открытого пользовательского сеанса. Особым «пожирателем» памяти является механизм полнотекстового поиска (ППД). Если индекс ППД поврежден или давно не обновлялся, фоновый процесс обновления индекса может забирать до 2 ГБ ОЗУ, существенно замедляя работу пользователя.

Проанализируем шаги по оптимизации регламентных заданий:

  1. Отключим полнотекстовый поиск, если пользователи им не пользуются. Для этого перейдем в раздел Администрирование -> Поддержка и обслуживание -> Управление полнотекстовым поиском и снимем флаг активности.
  2. Очистим старый индекс поиска, нажав кнопку Очистить индекс. Это освободит место в файле базы данных и разгрузит оперативную память.
  3. Используем специальную обработку «Консоль заданий» для отключения неиспользуемых заданий (таких как загрузка курсов валют каждый час, классификаторов банком, избыточная синхронизация данных и т.д.). Настроим их выполнение во внерабочее время.

Пример программного отключения неиспользуемого регламентного задания:


ВыборкаЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из ВыборкаЗаданий Цикл
    Если Задание.Метаданные.Имя = "ОбновлениеИндексаППД" Тогда
        Задание.Использование = Ложь;
        Задание.Записать();
    КонецЕсли;
КонецЦикла;

Причина 3: Утечки памяти в платформе и коде управляемых форм

Платформа 1С:Предприятие (особенно устаревшие релизы линейки 8.3.10 – 8.3.15) подвержена платформенным утечкам памяти. В процессе работы пользователи открывают десятки отчетов, динамических списков, документов. При закрытии этих окон оперативная память далеко не всегда возвращается операционной системе в полном объеме из-за сложных внутренних связей объектов и особенностей работы сборщика мусора.

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

Решение 3: Профилактика утечек памяти и обслуживание сервера

Для минимизации влияния утечек памяти на стабильность работы сервера терминалов применим комплекс административных мер:

  1. Регулярное обновление платформы 1С. Разработчики постоянно исправляют ошибки утечки памяти. Переход на стабильные современные релизы платформы (например, ветку 8.3.22 или 8.3.23) часто решает проблему накопления памяти процессами без изменения кода.
  2. Настройка политик завершения RDP-сеансов. На сервере терминалов настроим автоматическое завершение отключенных и спящих сессий. Если пользователь просто закрыл терминальное окно крестиком, его сеанс 1С продолжает висеть в памяти сервера и потреблять ресурсы. Установим лимит завершения неактивных сессий в 15–30 минут.
  3. Регулярная очистка кэша 1С. Кэш метаданных имеет свойство разрастаться и повреждаться. Рекомендуем периодически очищать каталоги кэша на сервере (папки LocalSettings\Application Data\1C\1Cv8 и Application Data\1C\1Cv8 в профилях пользователей).
  4. Еженедельный перезапуск сервера. Настроим планировщик задач Windows на автоматический ночной перезапуск сервера терминалов на выходных. Это позволяет полностью освободить заблокированную процессами оперативную память и устранить фрагментацию ОЗУ.

Решение 4: Очистка базы данных и вынос бинарных файлов

Размер файла базы данных 1Cv8.1CD напрямую влияет на объем кэшируемых данных. Если в базе хранится много картинок товаров (номенклатуры) или сканов документов в реквизитах типа ХранилищеЗначения, то при открытии списков или карточек товаров эти тяжелые двоичные данные считываются в оперативную память сеанса.

Выполним оптимизацию хранения файлов:

  1. Настроим хранение присоединенных файлов не в самой базе данных, а в томах на диске. Это разгрузит файл 1Cv8.1CD и снизит потребление оперативной памяти при работе со справочниками.
  2. Проведем тестирование и исправление базы данных с помощью утилиты Chdbfl.exe (предварительно сделав резервную копию базы!). Утилита восстановит физическую структуру таблиц.
  3. В Конфигураторе запустим процедуру Тестирование и исправление... с включенной опцией Сжатие таблиц. Это позволит удалить устаревшие версии записей и уменьшить физический размер файла базы на диске, что снизит нагрузку на дисковую подсистему и оперативную память.

Решение 5: Настройка схемы электропитания сервера

Этот шаг часто упускается из виду, но он критически важен. По умолчанию в Windows Server включена сбалансированная схема электропитания. В этом режиме процессор динамически снижает частоту при отсутствии пиковой нагрузки. Из-за этого задержки при обработке запросов 1С увеличиваются, процессы дольше обрабатывают данные и, как следствие, дольше удерживают оперативную память.

Переведем сервер в режим высокой производительности:

  1. Откроем Панель управления -> Электропитание.
  2. Выберем схему Высокая производительность (High Performance).
  3. В настройках BIOS/UEFI сервера также отключим технологии энергосбережения (C-States, Intel SpeedStep) и установим режим максимальной производительности.

Резюме и рекомендации

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

Если у вас ограничены аппаратные ресурсы сервера (например, установлено всего 16 ГБ ОЗУ), наилучшим решением без дополнительных финансовых затрат станет переход на работу через веб-сервер и тонкий клиент. Это позволит комфортно работать 5–10 пользователям на текущем оборудовании. В случае дальнейшего расширения штата сотрудников логичным шагом станет приобретение лицензий на сервер 1С:Предприятие и перевод баз данных в полноценный клиент-серверный вариант работы под управлением СУБД MS SQL или PostgreSQL.

← На главную