Проблема избыточного потребления оперативной памяти рабочими процессами rphost является одной из самых частых и сложных задач для администратора 1С. В данной статье мы разберем, как интерпретировать показатели счетчиков производительности, настроить серверный кластер для стабильной работы и найти истинные причины "утечек" памяти в коде или настройках платформы.
Прежде чем приступать к активным действиям, нам необходимо четко понимать, на какие показатели операционной системы мы опираемся. Проанализируем три ключевых счетчика:
Рассмотрим три типичные ситуации поведения этих счетчиков, с которыми сталкиваются специалисты:
Virtual Bytes, Working Set и Private Bytes растут синхронно. Это классический признак удержания объектов в памяти (например, циклические ссылки в коде или кэширование больших объемов данных).Working Set при отстающем Virtual Bytes. Обычно это свидетельствует о выполнении тяжелой операции, например, формировании огромного отчета или обработке большого файла в памяти.Самый быстрый способ минимизировать влияние проблем на пользователей — настроить автоматический перезапуск процессов. Выясним, как сделать это правильно, чтобы пользователи не замечали разрывов соединений.
В консоли администрирования сервера 1С нам необходимо установить следующие параметры для рабочего сервера:
rphost, а старый будет выключен после завершения текущих вызовов.Проанализируем также параметр "Безопасный расход памяти за один вызов". Это критически важная настройка. Если один "кривой" отчет пытается потребить, например, 5 ГБ памяти, установка лимита в 2 ГБ позволит серверу прервать только этот конкретный вызов с ошибкой, сохранив работоспособность всего процесса rphost для остальных 50 пользователей.
Если перезапуск процессов лишь маскирует проблему, перейдем к глубокому анализу. Рассмотрим, как настроить сбор данных для поиска виновника. Нам помогут события MEM (мониторинг памяти) и CALL/SCALL (вызовы процедур и функций).
Пример настройки logcfg.xml для отслеживания потребления памяти:
<config xmlns="http://v8.1c.ru/7.4/config/logcfg">
<log location="C:\LOGS\MEMORY" history="24">
<event>
<eq property="name" value="MEM"/>
</event>
<event>
<eq property="name" value="CALL"/>
<gt property="Memory" value="104857600"/>
</event>
<property name="all"/>
</log>
</config>
В данном примере мы фиксируем все события выделения памяти и все серверные вызовы, которые потребляют более 100 МБ за один раз. Проанализировав такие логи в моменты скачков Working Set, мы точно увидим, какой пользователь, какая база и какой метод встроенного языка вызвали проблему.
Выясним причину, почему обновление платформы часто решает проблему само по себе. В версиях (например, ветка 8.3.18) могут присутствовать внутренние ошибки управления памятью при работе с веб-сервисами или фоновыми заданиями. Переход на более современные релизы (8.3.22+) часто содержит исправления в механизмах сборщика мусора.
Также стоит обратить внимание на следующие аспекты:
rphost может зациклиться. Попробуйте временно отключить полнотекстовый поиск или очистить индекс на уровне файлов.rphost. Ошибка в коде такой C++ компоненты приведет к неуправляемой утечке памяти.Disable-MMAgent -mc.Подведем итог: если вы видите рост Virtual Bytes, который не возвращается операционной системе — это признак фрагментации памяти или удержания объектов.
Наши действия должны быть следующими:
Сочетание системных настроек и анализа кода позволит добиться стабильной ситуации, когда потребление памяти сервером 1С будет предсказуемым и не мешающим работе пользователей.