В терминальных средах (RDP) системные администраторы и специалисты по автоматизации часто сталкиваются с лавинообразным ростом потребления оперативной памяти процессами 1С. Рассмотрим классический сценарий: на сервере с 16 ГБ оперативной памяти работают всего 3–4 пользователя. Каждый из них запускает «тяжелую» конфигурацию (например, Управление торговлей, Бухгалтерия предприятия или Зарплата и управление персоналом) в файловом режиме. При старте сеанс занимает около 1 ГБ ОЗУ, но в процессе работы объем потребляемой памяти вырастает до 4 ГБ на пользователя. В результате сервер быстро исчерпывает свои ресурсы, начинаются жесткие задержки, система активно использует файл подкачки, а пользователи жалуются на медленную работу интерфейса.
В этой статье мы подробно разберем, почему файловая 1С на управляемых формах потребляет так много ОЗУ, проанализируем внутренние механизмы платформы и предложим проверенные методы оптимизации, которые позволят радикально снизить нагрузку на сервер.
Многие технические специалисты полагают, что использование тонкого клиента автоматически решает проблемы с производительностью и памятью. Выясним, почему это не так в случае файловых баз данных.
Когда мы запускаем 1С в файловом режиме, сервер приложений 1С отсутствует. Тонкий клиент не может напрямую работать с файлом базы данных 1Cv8.1CD. Чтобы решить эту проблему, платформа вынуждена эмулировать серверную среду непосредственно внутри клиентского процесса на локальной машине или в терминальной сессии пользователя.
Внутри процесса тонкого клиента запускается так называемый «собственный сервер», который берет на себя:
&НаСервере).В результате «тонкий» клиент превращается в полноценного «толстого» гиганта, потребляющего от 1 до 2 ГБ оперативной памяти сразу после авторизации пользователя. Если запустить несколько таких сеансов в одной терминальной среде, память сервера мгновенно исчерпается.
Рассмотрим наиболее эффективный способ решения проблемы «лже-тонкого» клиента — публикацию файловой базы на веб-сервере. Это действие превращает тонкий клиент в по-настоящему легкое приложение.
При публикации базы на веб-сервере (например, под управлением IIS или Apache) вся логика работы с СУБД и кэшем метаданных переносится в процессы веб-сервера (w3wp.exe или httpd.exe). Тонкие клиенты подключаются к базе по протоколу HTTP или HTTPS.
Посмотрим, как меняется распределение памяти в этой схеме:
Для настройки публикации выполним следующие шаги:
IIS (встроенная роль Windows Server) или установим Apache.Разберем еще один важный нюанс. При запуске сеанса платформа 1С обязана полностью загрузить в оперативную память структуру метаданных конфигурации. Это необходимо для того, чтобы в любой момент времени при вызове процедур или открытии форм система не тратила время на чтение диска.
Если мы выгрузим конфигурацию в файл 1Cv8.cf и увидим, что его размер составляет, например, 800 МБ, то открытый сеанс гарантированно потребует не менее этого объема ОЗУ только под саму конфигурацию, без учета обрабатываемых данных. Тяжелые современные конфигурации содержат огромное количество объектов метаданных, что физически не позволяет им работать на минимальных ресурсах.
Часто скрытой причиной резкого роста потребления памяти до 3–4 ГБ за сеанс является неконтролируемое выполнение фоновых и регламентных заданий в файловом режиме.
Поскольку выделенного сервера приложений нет, выполнение регламентных заданий запускается внутри первого открытого пользовательского сеанса. Особым «пожирателем» памяти является механизм полнотекстового поиска (ППД). Если индекс ППД поврежден или давно не обновлялся, фоновый процесс обновления индекса может забирать до 2 ГБ ОЗУ, существенно замедляя работу пользователя.
Проанализируем шаги по оптимизации регламентных заданий:
Пример программного отключения неиспользуемого регламентного задания:
ВыборкаЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из ВыборкаЗаданий Цикл
Если Задание.Метаданные.Имя = "ОбновлениеИндексаППД" Тогда
Задание.Использование = Ложь;
Задание.Записать();
КонецЕсли;
КонецЦикла;
Платформа 1С:Предприятие (особенно устаревшие релизы линейки 8.3.10 – 8.3.15) подвержена платформенным утечкам памяти. В процессе работы пользователи открывают десятки отчетов, динамических списков, документов. При закрытии этих окон оперативная память далеко не всегда возвращается операционной системе в полном объеме из-за сложных внутренних связей объектов и особенностей работы сборщика мусора.
Также причиной утечки может быть неоптимальный код доработок конфигурации. Например, использование больших временных таблиц в запросах без их последующего уничтожения или накопление глобальных переменных в модуле управляемого приложения.
Для минимизации влияния утечек памяти на стабильность работы сервера терминалов применим комплекс административных мер:
LocalSettings\Application Data\1C\1Cv8 и Application Data\1C\1Cv8 в профилях пользователей).Размер файла базы данных 1Cv8.1CD напрямую влияет на объем кэшируемых данных. Если в базе хранится много картинок товаров (номенклатуры) или сканов документов в реквизитах типа ХранилищеЗначения, то при открытии списков или карточек товаров эти тяжелые двоичные данные считываются в оперативную память сеанса.
Выполним оптимизацию хранения файлов:
1Cv8.1CD и снизит потребление оперативной памяти при работе со справочниками.Chdbfl.exe (предварительно сделав резервную копию базы!). Утилита восстановит физическую структуру таблиц.Этот шаг часто упускается из виду, но он критически важен. По умолчанию в Windows Server включена сбалансированная схема электропитания. В этом режиме процессор динамически снижает частоту при отсутствии пиковой нагрузки. Из-за этого задержки при обработке запросов 1С увеличиваются, процессы дольше обрабатывают данные и, как следствие, дольше удерживают оперативную память.
Переведем сервер в режим высокой производительности:
Подводя итоги нашего анализа, отметим, что потребление 1 ГБ оперативной памяти для современных конфигураций 1С на управляемых формах в файловом режиме является технической нормой, обусловленной архитектурой платформы. Однако рост потребления до 4 ГБ на сеанс — это явный признак неоптимальной настройки.
Если у вас ограничены аппаратные ресурсы сервера (например, установлено всего 16 ГБ ОЗУ), наилучшим решением без дополнительных финансовых затрат станет переход на работу через веб-сервер и тонкий клиент. Это позволит комфортно работать 5–10 пользователям на текущем оборудовании. В случае дальнейшего расширения штата сотрудников логичным шагом станет приобретение лицензий на сервер 1С:Предприятие и перевод баз данных в полноценный клиент-серверный вариант работы под управлением СУБД MS SQL или PostgreSQL.