Почему рабочий процесс rphost не освобождает память и как правильно настроить сервер 1С

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

Многие администраторы систем 1С сталкиваются с ситуацией, когда рабочий процесс rphost потребляет огромные объемы оперативной памяти и не спешит возвращать их операционной системе даже после завершения тяжелых отчетов или закрытия сеансов пользователями. В этой статье мы подробно разберем механизмы управления памятью в платформе «1С:Предприятие 8.3», выясним причины такого поведения и рассмотрим пошаговые инструкции по оптимизации настроек серверного кластера.

Анализируем причины: почему rphost «пухнет»

Первым делом нам необходимо понять, что поведение rphost, при котором он не отдает память сразу, во многом продиктовано архитектурой платформы. Рассмотрим основные факторы:

  1. Собственный менеджер памяти 1С. Платформа не запрашивает память у операционной системы побайтово. Вместо этого менеджер памяти 1С захватывает у ОС большие блоки (так называемые пулы). Когда сеанс пользователя завершает работу с данными, 1С помечает эту память внутри пула как «свободную», но для операционной системы этот блок данных по-прежнему числится за процессом rphost. Это сделано для повышения производительности: если другому сеансу потребуется память, 1С выделит ее из уже захваченного пула гораздо быстрее, чем через новый системный вызов к ядру ОС.
  2. Фрагментация памяти. Проанализируем ситуацию: процесс занял 10 Гб, затем 9 Гб освободились. Однако если оставшийся 1 Гб данных распределен мелкими фрагментами по всему адресному пространству, ОС не сможет «отрезать» пустые участки и забрать их себе. Память возвращается системе только непрерывными блоками с «конца» выделенного адресного пространства.
  3. Кэширование метаданных и модулей. Процесс rphost хранит в себе скомпилированные модули, кэши конфигурации и результаты запросов. В высоконагруженных системах объем кэша может составлять несколько гигабайт. Этот кэш является общим и не очищается при выходе одного пользователя.
  4. Циклические ссылки. В программном коде могут возникать ситуации, когда объект А ссылается на объект Б, а тот — на А. Менеджер памяти 1С имеет встроенный механизм Garbage Collector (сборщик мусора), но он работает по расписанию и не всегда может мгновенно разорвать такие связи, особенно в плохо оптимизированном коде.

Настройка лимитов памяти в консоли кластера

Разберем, как мы можем ограничить аппетиты рабочих процессов через стандартные настройки 1С. Для этого нам понадобится консоль администрирования серверов 1С.

Шаг 1. Настройка допустимого объема памяти.

Перейдем в свойства рабочего сервера. Нас интересуют следующие параметры:

Шаг 2. Временно допустимый объем памяти.

Рассмотрим параметр Временно допустимый объем памяти. Это объем, который процесс может занимать в течение определенного времени (задается в поле Интервал превышения допустимого объема памяти). По истечении этого времени rphost будет перезапущен платформой автоматически. Это самый эффективный способ «сдуть» разросшийся процесс в автоматическом режиме.

Стратегия использования нескольких рабочих процессов

Проанализируем ситуацию: если у нас один огромный rphost на 70 Гб, то любая критическая ошибка в нем приведет к выбросу всех пользователей из системы. Выясним преимущества разделения нагрузки:

  1. Изоляция сбоев. Если один процесс раздулся из-за фрагментации, его можно перезапустить, затронув лишь часть пользователей.
  2. Переиспользование памяти. Существует мнение, что один процесс лучше переиспользует память. Однако при большом количестве ядер процессора несколько процессов rphost работают эффективнее за счет снижения конкуренции за ресурсы менеджера памяти.
  3. Приоритет по производительности. В настройках кластера выберем «Приоритет по производительности». Это заставит систему распределять сеансы более равномерно.

Диагностика через технологический журнал

Если память уходит слишком быстро, нам необходимо выяснить, какой именно код в этом виноват. Для этого настроим технологический журнал — ключевой инструмент для поиска узких мест в производительности. Рассмотрим пример конфигурационного файла logcfg.xml для отслеживания утечек:


<config xmlns="http://v8.1c.ru/7.4/get/logcfg">
  <log location="C:\Logs\MemoryLeaks" history="24">
    <event>
      <eq property="Name" value="LEAK"/>
    </event>
    <event>
      <eq property="Name" value="SCRIPTCIRCREF"/>
    </event>
    <event>
      <eq property="Name" value="CALL"/>
      <gt property="Memory" value="100000000"/>
    </event>
    <property name="All"/>
  </log>
</config>

В данном примере мы отслеживаем:

Анализ текстовых логов вручную может быть трудоемким, поэтому для упрощения задачи существуют различные утилиты, например, позволяющие убрать лишние переносы строк или выполнить конвертацию ТЖ в формат JSON. Для более глубокого анализа и визуализации данных рекомендуется настроить экспорт технологического журнала в Elastic.

Использование новых возможностей платформы (8.3.27+)

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

  1. В консоли управления кластером перейдем к настройкам рабочего сервера.
  2. Найдем раздел управления временем работы процессов.
  3. Настроим перезапуск в часы минимальной нагрузки (например, в 3:00 ночи). Это позволяет гарантированно очистить фрагментированную память без участия администратора и «убивания» процессов вручную.

Особенности работы на ОС Linux

Если ваш сервер 1С работает под управлением Linux, проанализируем настройки библиотеки glibc. По умолчанию Linux может удерживать память очень агрессивно. Для решения этой проблемы рекомендуется ограничить количество «арен» памяти (arenas).

Посмотрим, как установить переменную окружения в скрипте запуска сервера:

export MALLOC_ARENA_MAX=4

Это заставит систему более активно возвращать неиспользуемые страницы памяти обратно операционной системе, что предотвратит бесконечный рост rphost в визуальном мониторинге top или htop. Стоит отметить, что такая тонкая настройка является частью комплексного обслуживания серверов 1С под Linux, которое также включает работу с СУБД.

Подведем итоги

Мы выяснили, что «раздувание» rphost — это не всегда ошибка, а часто особенность работы менеджера памяти. Для стабильной работы системы нам необходимо:

← На главную