Ситуация, когда один экземпляр файловой базы 1С начинает потреблять десятки гигабайт оперативной памяти (вплоть до 50–60 Гб), является критической для стабильности терминального сервера. Особенно часто это проявляется на современных версиях платформы (8.3.18, 8.3.19 и выше) при работе в режиме удаленных рабочих столов (RDS) на Windows Server 2019. Проанализируем причины этого поведения и разберем по шагам методы решения данной проблемы.
В файловом варианте работы 1С отсутствует отдельный процесс сервера приложений, поэтому все регламентные и фоновые задания выполняются непосредственно в контексте сеанса активного пользователя. Рассмотрим подробнее, почему это приводит к «жору» памяти. Когда пользователь запускает базу, платформа инициирует отдельный поток для обработки задач: обновление классификаторов, проверка ЭДО, получение новостей и так далее. Если заданий много или одно из них зацикливается, процесс 1cv8.exe начинает бесконтрольно расширять свой Working Set.
Разберем, как минимизировать влияние этого механизма:
Полнотекстовый поиск — это полезная функция, но в файловых базах она часто становится источником бед. Если индекс поврежден или база данных имеет значительный объем, процесс индексации может потреблять колоссальные ресурсы. Выясним причину: при попытке обработать большой объем данных в оперативной памяти строится дерево поиска, которое в случае ошибки не очищается корректно.
Выполним следующие действия для устранения этой причины:
1Cv8FTxt. При следующем запуске 1С не будет пытаться обращаться к потенциально поврежденным индексам, что существенно снизит нагрузку на RAM.Современная платформа 1С использует встроенный движок браузера для отображения форм с динамическим контентом: новостей, рекламных баннеров на начальной странице, монитора налогов. В ветках 8.3.18 и 8.3.19 была зафиксирована программная ошибка, из-за которой память, выделенная под отрисовку этих форм, не возвращалась операционной системе даже после закрытия вкладок. Это объясняет, почему база «съедает» 54 Гб, даже если пользователь «ничего не делает».
Рассмотрим, как отключить интернет-компоненты, вызывающие утечку:
В некоторых релизах платформы, таких как 8.3.18.1563, наблюдались утечки при вызове внешних компонент, отвечающих за криптографию (ЭДО) и печать штрихкодов. Проанализируем ситуацию: если база активно использует защищенное соединение или работу с сертификатами, каждый такой вызов может оставлять в памяти «сиротские» объекты.
Проверим решение через обновление платформы:
Если текущая версия платформы находится в диапазоне 8.3.18.х или 8.3.19.х, настоятельно рекомендуется перейти на более стабильные ветки, например 8.3.22.1709 или выше. В новых релизах разработчики 1С провели значительную работу над оптимизацией управления памятью в файловом режиме и исправили ошибки взаимодействия с библиотеками операционной системы.
Иногда причиной аномального роста процесса является «раздутая» таблица внутренних настроек (хранилище общих настроек) или некорректный локальный кэш пользователя. Посмотрим на алгоритм очистки:
%AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8. Это заставит систему пересобрать временные файлы при следующем запуске.Для автоматизации контроля за потреблением памяти можно использовать простой скрипт на языке 1С или PowerShell, который будет принудительно завершать сеансы, превышающие порог, например, в 4 Гб. Рассмотрим пример логики на языке 1С для регламентного задания, которое могло бы мониторить состояние:
Процедура ПроверитьПотреблениеПамяти()
// Данный код носит концептуальный характер
// В файловом режиме прямой мониторинг RAM процесса 1cv8.exe
// изнутри самого процесса затруднен без использования COM
ОбъектWMI = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2");
СписокПроцессов = ОбъектWMI.ExecQuery("Select * from Win32_Process Where Name = '1cv8.exe'");
Для Каждого Процесс Из СписокПроцессов Цикл
РазмерПамятиМб = Процесс.WorkingSetSize / 1024 / 1024;
Если РазмерПамятиМб > 4096 Тогда
// Запись в журнал регистрации и возможные действия
ЗаписьЖурналаРегистрации("Внимание", УровеньЖурналаРегистрации.Предупреждение, , ,
"Процесс " + Процесс.ProcessId + " потребляет " + РазмерПамятиМб + " Мб");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Поскольку проблема возникает на Windows Server 2019 в режиме RDS, проанализируем настройки системы. Иногда помогает отключение аппаратного ускорения графики, так как 1С пытается использовать ресурсы видеокарты (даже виртуальной) для отрисовки интерфейса «Такси», что в серверных ОС приводит к утечкам в библиотеке gdiplus.dll. Также убедитесь, что расширения файлов 1С (.1CD, .1CL) добавлены в исключения антивируса, чтобы предотвратить создание бесконечных очередей ожидания при обращении фоновых заданий к файлу базы данных.
Резюме: Основной удар по памяти наносят полнотекстовый поиск и интернет-сервисы (новости/реклама). Отключив эти функции и обновив платформу до актуальной версии, мы сможем вернуть потребление памяти в пределы нормы (от 500 Мб до 2.5 Гб на процесс).