При переводе пользователей на платформу 1С:Предприятие 8.3 и конфигурации на управляемых формах (например, «1С:Бухгалтерия предприятия 3.0») системные администраторы часто сталкиваются с ситуацией, когда каждый запущенный процесс 1cv8 или 1cv8c сразу после старта занимает от 600 Мб до 1,2 Гб оперативной памяти. На серверах с небольшим объемом RAM (например, 4 Гб) это приводит к быстрому заполнению физической памяти, активному уходу в swap и полному зависанию терминальной среды. Разберем причины такого поведения платформы и детальные шаги по стабилизации работы системы.
Причины повышенного потребления памяти в файловом режиме
Выясним, почему процесс 1С в файловом варианте требует значительно больше памяти по сравнению со старыми релизами платформы 8.2:
Совмещение ролей в одном процессе: В файловом варианте клиентское приложение выполняет не только функции графического интерфейса, но и работу полноценного сервера приложений, а также встроенного движка СУБД. Конфигурация в распакованном виде компилируется и удерживается непосредственно в адресном пространстве процесса пользователя.
Объем метаданных современных конфигураций: Конфигурация «Бухгалтерия предприятия 3.0» в упакованном виде занимает сотни мегабайт, а при инициализации структур данных и кэшей форм в оперативной памяти требует от 700 Мб до 1 Гб на сеанс.
64-разрядная архитектура: При использовании 64-битных сборок платформы (amd64) указатели и внутренние структуры занимают в два раза больше места, что увеличивает базовый расход RAM на 30–50%.
Фрагментация памяти стандартного аллокатора glibc: Менеджер памяти Linux (glibc malloc) при частых операциях выделения и освобождения небольших блоков памяти, характерных для управляемого интерфейса, фрагментирует пространство и не возвращает освобожденные страницы ядру ОС, из-за чего показатель RES в утилите top непрерывно растет.
Решение 1. Архитектурный переход: Публикация файловой базы на веб-сервере
Запуск сеансов через терминальный сервер Linux (X11/NX/x2go) для каждого пользователя — наиболее ресурсоемкая схема. Вместо запуска тяжелых процессов на одном сервере перейдем к публикации базы через веб-сервер (Apache или Nginx/httpd):
Опубликуем файловую базу на веб-сервере Apache. В этом случае серверная логика и кэш метаданных загружаются в память воркеров веб-сервера централизованно.
Пользователи подключаются с рабочих станций через Тонкий клиент по протоколу HTTP/HTTPS или через веб-браузер.
Это полностью снимает с сервера нагрузку по рендерингу графического интерфейса и разделяет клиентский контекст и обработку данных базы.
Для предотвращения накопления утечек памяти в конфигурации Apache зададим периодический перезапуск рабочих процессов с помощью директивы MaxConnectionsPerChild (или MaxRequestsPerChild):
В настройках параметров информационной базы настроим таймауты завершения неактивных сеансов, чтобы отключившиеся пользователи не удерживали память на веб-сервере.
Решение 2. Замена системного аллокатора памяти на TCMalloc
Для предотвращения раздувания резидентной памяти процесса 1cv8 из-за фрагментации glibc подключим оптимизированный аллокатор TCMalloc (библиотека Google Performance Tools) или jemalloc через механизм LD_PRELOAD:
Установим пакет в систему (для Debian/Ubuntu):
sudo apt-get install libtcmalloc-minimal4
Зададим переменную окружения при запуске процесса 1С или в скрипте запуска сеанса пользователя:
Это позволит оперативно возвращать неиспользуемую память операционной системе и снизит общий объем занятой RAM процессами 1С на 20–35%.
Решение 3. Тюнинг параметров подсистемы виртуальной памяти Linux
Проанализируем вывод утилиты top: при наличии свободной физической памяти система начинает активно использовать swap (более 3 Гб занято в файле подкачки), вызывая дисковые задержки и зависание интерфейса. Настроим параметры ядра Linux:
Уменьшим агрессивность использования подкачки, изменив параметр vm.swappiness со стандартного значения 60 до 1–10. Откроем файл /etc/sysctl.conf и добавим строку:
vm.swappiness = 10
Применим изменения без перезагрузки командой sudo sysctl -p. Теперь система будет сбрасывать страницы в swap только при реальной нехватке физической RAM.
Отключим механизм Transparent Huge Pages (THP), так как фоновый процесс дефрагментации больших страниц khugepaged приводит к микрозадержкам и раздуванию структур памяти при хаотичном доступе к данным 1С:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
Для сохранения параметров после перезагрузки добавим эти команды в файл /etc/rc.local или настроим соответствующий сервис systemd.
Решение 4. Расчет и выделение оперативной памяти
Если специфика работы требует сохранения терминального сервера Linux, необходимо скорректировать объем выделяемой памяти под виртуальную машину:
Рассчитаем минимальный объем RAM по формуле: 2 Гб (на нужды ОС и графической оболочки) + 1–1,5 Гб на каждого активного пользователя 1С.
Для одновременной работы 10 пользователей в конфигурации «Бухгалтерия предприятия 3.0» серверу требуется не менее 16 Гб RAM. Выделение 4 Гб для многопользовательской терминальной работы с базами 8.3 является критически недостаточным.