Почему файловая база 1С 8.3 под Linux потребляет гигабайт памяти и как устранить зависания сервера

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

При переводе пользователей на платформу 1С:Предприятие 8.3 и конфигурации на управляемых формах (например, «1С:Бухгалтерия предприятия 3.0») системные администраторы часто сталкиваются с ситуацией, когда каждый запущенный процесс 1cv8 или 1cv8c сразу после старта занимает от 600 Мб до 1,2 Гб оперативной памяти. На серверах с небольшим объемом RAM (например, 4 Гб) это приводит к быстрому заполнению физической памяти, активному уходу в swap и полному зависанию терминальной среды. Разберем причины такого поведения платформы и детальные шаги по стабилизации работы системы.

Причины повышенного потребления памяти в файловом режиме

Выясним, почему процесс 1С в файловом варианте требует значительно больше памяти по сравнению со старыми релизами платформы 8.2:

  1. Совмещение ролей в одном процессе: В файловом варианте клиентское приложение выполняет не только функции графического интерфейса, но и работу полноценного сервера приложений, а также встроенного движка СУБД. Конфигурация в распакованном виде компилируется и удерживается непосредственно в адресном пространстве процесса пользователя.
  2. Объем метаданных современных конфигураций: Конфигурация «Бухгалтерия предприятия 3.0» в упакованном виде занимает сотни мегабайт, а при инициализации структур данных и кэшей форм в оперативной памяти требует от 700 Мб до 1 Гб на сеанс.
  3. 64-разрядная архитектура: При использовании 64-битных сборок платформы (amd64) указатели и внутренние структуры занимают в два раза больше места, что увеличивает базовый расход RAM на 30–50%.
  4. Фрагментация памяти стандартного аллокатора glibc: Менеджер памяти Linux (glibc malloc) при частых операциях выделения и освобождения небольших блоков памяти, характерных для управляемого интерфейса, фрагментирует пространство и не возвращает освобожденные страницы ядру ОС, из-за чего показатель RES в утилите top непрерывно растет.

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

Запуск сеансов через терминальный сервер Linux (X11/NX/x2go) для каждого пользователя — наиболее ресурсоемкая схема. Вместо запуска тяжелых процессов на одном сервере перейдем к публикации базы через веб-сервер (Apache или Nginx/httpd):

  1. Опубликуем файловую базу на веб-сервере Apache. В этом случае серверная логика и кэш метаданных загружаются в память воркеров веб-сервера централизованно.
  2. Пользователи подключаются с рабочих станций через Тонкий клиент по протоколу HTTP/HTTPS или через веб-браузер.
  3. Это полностью снимает с сервера нагрузку по рендерингу графического интерфейса и разделяет клиентский контекст и обработку данных базы.
  4. Для предотвращения накопления утечек памяти в конфигурации Apache зададим периодический перезапуск рабочих процессов с помощью директивы MaxConnectionsPerChild (или MaxRequestsPerChild):
    
    <IfModule mpm_event_module>
        MaxConnectionsPerChild 2000
    </IfModule>
    
  5. В настройках параметров информационной базы настроим таймауты завершения неактивных сеансов, чтобы отключившиеся пользователи не удерживали память на веб-сервере.

Решение 2. Замена системного аллокатора памяти на TCMalloc

Для предотвращения раздувания резидентной памяти процесса 1cv8 из-за фрагментации glibc подключим оптимизированный аллокатор TCMalloc (библиотека Google Performance Tools) или jemalloc через механизм LD_PRELOAD:

  1. Установим пакет в систему (для Debian/Ubuntu): sudo apt-get install libtcmalloc-minimal4
  2. Зададим переменную окружения при запуске процесса 1С или в скрипте запуска сеанса пользователя:
    
    export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"
    /opt/1C/v8.3/x86_64/1cv8
    
  3. Это позволит оперативно возвращать неиспользуемую память операционной системе и снизит общий объем занятой RAM процессами 1С на 20–35%.

Решение 3. Тюнинг параметров подсистемы виртуальной памяти Linux

Проанализируем вывод утилиты top: при наличии свободной физической памяти система начинает активно использовать swap (более 3 Гб занято в файле подкачки), вызывая дисковые задержки и зависание интерфейса. Настроим параметры ядра Linux:

  1. Уменьшим агрессивность использования подкачки, изменив параметр vm.swappiness со стандартного значения 60 до 1–10. Откроем файл /etc/sysctl.conf и добавим строку: vm.swappiness = 10 Применим изменения без перезагрузки командой sudo sysctl -p. Теперь система будет сбрасывать страницы в swap только при реальной нехватке физической RAM.
  2. Отключим механизм 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, необходимо скорректировать объем выделяемой памяти под виртуальную машину:

  1. Рассчитаем минимальный объем RAM по формуле: 2 Гб (на нужды ОС и графической оболочки) + 1–1,5 Гб на каждого активного пользователя 1С.
  2. Для одновременной работы 10 пользователей в конфигурации «Бухгалтерия предприятия 3.0» серверу требуется не менее 16 Гб RAM. Выделение 4 Гб для многопользовательской терминальной работы с базами 8.3 является критически недостаточным.
← На главную