Многие администраторы систем 1С сталкиваются с ситуацией, когда рабочий процесс rphost потребляет огромные объемы оперативной памяти и не спешит возвращать их операционной системе даже после завершения тяжелых отчетов или закрытия сеансов пользователями. В этой статье мы подробно разберем механизмы управления памятью в платформе «1С:Предприятие 8.3», выясним причины такого поведения и рассмотрим пошаговые инструкции по оптимизации настроек серверного кластера.
Первым делом нам необходимо понять, что поведение rphost, при котором он не отдает память сразу, во многом продиктовано архитектурой платформы. Рассмотрим основные факторы:
rphost. Это сделано для повышения производительности: если другому сеансу потребуется память, 1С выделит ее из уже захваченного пула гораздо быстрее, чем через новый системный вызов к ядру ОС.rphost хранит в себе скомпилированные модули, кэши конфигурации и результаты запросов. В высоконагруженных системах объем кэша может составлять несколько гигабайт. Этот кэш является общим и не очищается при выходе одного пользователя.Garbage Collector (сборщик мусора), но он работает по расписанию и не всегда может мгновенно разорвать такие связи, особенно в плохо оптимизированном коде.Разберем, как мы можем ограничить аппетиты рабочих процессов через стандартные настройки 1С. Для этого нам понадобится консоль администрирования серверов 1С.
Шаг 1. Настройка допустимого объема памяти.
Перейдем в свойства рабочего сервера. Нас интересуют следующие параметры:
Шаг 2. Временно допустимый объем памяти.
Рассмотрим параметр Временно допустимый объем памяти. Это объем, который процесс может занимать в течение определенного времени (задается в поле Интервал превышения допустимого объема памяти). По истечении этого времени rphost будет перезапущен платформой автоматически. Это самый эффективный способ «сдуть» разросшийся процесс в автоматическом режиме.
Проанализируем ситуацию: если у нас один огромный rphost на 70 Гб, то любая критическая ошибка в нем приведет к выбросу всех пользователей из системы. Выясним преимущества разделения нагрузки:
rphost работают эффективнее за счет снижения конкуренции за ресурсы менеджера памяти.Если память уходит слишком быстро, нам необходимо выяснить, какой именно код в этом виноват. Для этого настроим технологический журнал — ключевой инструмент для поиска узких мест в производительности. Рассмотрим пример конфигурационного файла 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>
В данном примере мы отслеживаем:
LEAK — подозрения на прямые утечки памяти в платформе.SCRIPTCIRCREF — обнаруженные циклические ссылки в коде конфигурации.CALL — вызовы сервера, потребляющие более 100 Мб памяти (значение Memory указывается в байтах). Это поможет найти конкретный отчет или обработку, которая «раздувает» rphost.Анализ текстовых логов вручную может быть трудоемким, поэтому для упрощения задачи существуют различные утилиты, например, позволяющие убрать лишние переносы строк или выполнить конвертацию ТЖ в формат JSON. Для более глубокого анализа и визуализации данных рекомендуется настроить экспорт технологического журнала в Elastic.
Начиная с последних версий платформы, разработчики добавили возможность задания расписания перезапуска рабочих процессов. Разберем по шагам, как это настроить:
Если ваш сервер 1С работает под управлением Linux, проанализируем настройки библиотеки glibc. По умолчанию Linux может удерживать память очень агрессивно. Для решения этой проблемы рекомендуется ограничить количество «арен» памяти (arenas).
Посмотрим, как установить переменную окружения в скрипте запуска сервера:
export MALLOC_ARENA_MAX=4
Это заставит систему более активно возвращать неиспользуемые страницы памяти обратно операционной системе, что предотвратит бесконечный рост rphost в визуальном мониторинге top или htop. Стоит отметить, что такая тонкая настройка является частью комплексного обслуживания серверов 1С под Linux, которое также включает работу с СУБД.
Мы выяснили, что «раздувание» rphost — это не всегда ошибка, а часто особенность работы менеджера памяти. Для стабильной работы системы нам необходимо:
Временно допустимый объем памяти и Интервал превышения.