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

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

Приветствуем вас, коллеги! Сегодня мы детально разберем крайне распространенную и весьма болезненную проблему, с которой сталкиваются системные администраторы и специалисты 1С при развертывании тяжелых типовых конфигураций в терминальной среде (RDS/RDP). Речь идет о ситуации, когда процессы «1С:Предприятие» начинают лавинообразно поглощать оперативную память на сервере терминалов, забирая по 4 ГБ и более на каждого активного пользователя. Выясним причины такого поведения системы, проанализируем узкие места архитектуры и рассмотрим по шагам несколько эффективных методов борьбы с прожорливостью платформы, начиная от простых оптимизаций настроек и заканчивая архитектурными изменениями.

Анализируем проблему: почему файловая «1С:Комплексная автоматизация 2» съедает гигабайты памяти?

Для начала давайте разберемся, почему возникает такая ситуация. В рассматриваемом нами кейсе используется конфигурация «1С:Комплексная автоматизация 2» (КА2), работающая в файловом режиме внутри терминальной сессии (RDP). Это классический пример «гремучей смеси» для инфраструктуры по следующим причинам:

Решение №1: Публикация базы на веб-сервере и переход на настоящий тонкий клиент

Рассмотрим подробнее наиболее эффективный промежуточный вариант, который не требует покупки дорогостоящей лицензии на сервер «1С:Предприятие», но кардинально решает проблему потребления оперативной памяти в терминале. Это публикация файловой базы на веб-сервере (IIS или Apache) и последующее подключение через тонкий клиент.

Что происходит при такой схеме работы?

  1. Вся тяжелая работа по непосредственному взаимодействию с файлом базы данных 1cv8.1cd переносится на веб-сервер. Запросы к базе данных выполняет один процесс веб-сервера (например, пул приложений w3wp.exe для IIS).
  2. В терминальных сессиях пользователей запускается чистый тонкий клиент 1cv8c.exe. Он не содержит в себе СУБД dbeng8, не кэширует таблицы локально и занимается исключительно отрисовкой интерфейса (форм «Такси»).
  3. Потребление оперативной памяти на одного пользователя в терминале снижается с огромных 3–4 ГБ до скромных 150–400 МБ! Это позволяет высвободить колоссальный объем ресурсов сервера.

Разберем по шагам, как выполнить публикацию на примере веб-сервера IIS:

  1. Установите роль веб-сервера (IIS) через диспетчер серверов Windows Server, обязательно отметив компоненты ASP.NET и расширения ISAPI.
  2. Запустите конфигуратор «1С:Предприятия» от имени администратора.
  3. Перейдите в меню Администрирование — Публикация на веб-сервере....
  4. Укажите имя публикации, выберите веб-сервер (IIS), настройте каталог для размещения файлов публикации и нажмите кнопку «Опубликовать».
  5. Настройте подключение пользователей в окне запуска 1С: вместо пути к локальному/сетевому каталогу укажите адрес ссылки вида http://имя_сервера/имя_публикации.

Решение №2: Переход на полноценный клиент-серверный вариант (SQL)

Выясним причину, почему для тяжелых конфигураций уровня КА2 и ERP файловый вариант в принципе считается компромиссным и нежелательным. Переход на полноценную клиент-серверную архитектуру (MS SQL Server, PostgreSQL) полностью разделяет уровни представления и базы данных.

При переходе на SQL:

Решение №3: Отключение полнотекстового поиска и оптимизация регламентных заданий

Проанализируем ситуацию, когда переход на веб-сервер или SQL по каким-то причинам откладывается. Что можно сделать в настройках самой 1С для снижения нагрузки? Одной из главных причин утечек памяти является механизм полнотекстового поиска (ППД).

По умолчанию система регулярно индексирует все данные для быстрого поиска по всей базе. В файловом режиме это создает огромную нагрузку на ОЗУ. Выполним оптимизацию:

  1. Запустите базу под учетной записью администратора и перейдите в раздел НСИ и администрирование — Администрирование — Поддержка и обслуживание.
  2. Найдите раздел Полнотекстовый поиск данных.
  3. Если поиск не является критически важным для пользователей, снимите флаг Разрешить полнотекстовый поиск. Если поиск необходим, выполните очистку индекса и настройте расписание его обновления на нерабочее время (например, ночью).
  4. Перейдите по ссылке Регламентные и фоновые задания. Отключите все неиспользуемые механизмы: автоматическое извлечение текстов, синхронизацию данных (если она не настроена), обновление классификаторов, проверку контрагентов и прочие вспомогательные службы, которые незаметно поглощают драгоценную память прямо во время работы пользователей.

Решение №4: Регулярная очистка кэша пользователей

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

Для решения этой проблемы мы рекомендуем настроить автоматическую очистку кэша. Рассмотрим пример PowerShell-скрипта, который можно запускать по расписанию (например, каждую ночь) или при выходе пользователя из терминальной сессии (через Logoff-скрипты групповых политик):


# Скрипт очистки временных файлов и кэша 1С для всех пользователей терминала
$UsersPath = "C:\Users"
Get-ChildItem -Path $UsersPath -Directory | ForEach-Object {
    $Local1C = Join-Path $_.FullName "AppData\Local\1C\1cv8"
    $Roaming1C = Join-Path $_.FullName "AppData\Roaming\1C\1cv8"
    
    # Удаление файлов локального кэша
    If (Test-Path $Local1C) {
        Get-ChildItem -Path $Local1C -Exclude "profiles" -Recurse -Force | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
    }
    # Удаление файлов роуминг-кэша
    If (Test-Path $Roaming1C) {
        Get-ChildItem -Path $Roaming1C -Exclude "profiles" -Recurse -Force | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
    }
}

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

Решение №5: Управление зарезервированной памятью (Standby) на уровне операционной системы

Часто системные администраторы замечают, что даже после закрытия сессий пользователей или перезапуска процессов свободная оперативная память на сервере не возвращается. Windows Server кэширует неактивные страницы памяти, переводя их в режим ожидания (Standby list). Диспетчер задач при этом показывает высокую загрузку памяти.

Для принудительной оптимизации рабочих наборов памяти (Working Sets) процессов и очистки списков ожидания можно использовать бесплатную утилиту от Microsoft — EmptyStandbyList.exe. Настроим ее регулярный запуск через Планировщик задач Windows:

  1. Скачайте утилиту и сохраните ее в системную папку (например, C:\Windows\System32\).
  2. Откройте Планировщик задач (Task Scheduler) и создайте новую задачу с наивысшими правами (от имени учетной записи SYSTEM).
  3. В качестве триггера укажите запуск каждые 2–4 часа ежедневно.
  4. В качестве действия укажите запуск программы EmptyStandbyList.exe с аргументом standbylist.
  5. Дополнительно можно создать действие для оптимизации рабочих наборов процессов с аргументом workingsets. Это принудительно заставит операционную систему сбросить неиспользуемую память процессов 1С в файл подкачки, освобождая физическую ОЗУ.

Решение №6: Оптимизация интерфейса «Такси» и графического ускорения в RDP

Современный интерфейс 1С «Такси» активно использует графические эффекты, сглаживание шрифтов и анимацию. При работе в терминальном режиме через протокол RDP вся отрисовка выполняется процессором сервера, что вызывает дополнительный расход памяти процессами 1cv8.exe из-за особенностей графической подсистемы GDI+.

Выполним следующие шаги для снижения нагрузки на отрисовку:

Подводя итог нашему разбору, отметим: утилизация оперативной памяти процессом файловой 1С в объеме до 4 ГБ при работе с тяжелой конфигурацией КА2 — это ожидаемое архитектурное следствие работы локального СУБД-движка и огромного объема кода метаданных. Наиболее надежным, масштабируемым и правильным решением является публикация информационной базы на веб-сервере IIS или Apache для работы через легкий тонкий клиент, либо полноценная миграция на клиент-серверную архитектуру с использованием SQL. Побочные методы оптимизации (чистка кэша, отключение ППД и регламентных заданий) помогут временно сгладить острые углы, но в долгосрочной перспективе не заменят грамотного архитектурного разделения слоев приложения.

← На главную