В процессе администрирования кластера серверов 1С:Предприятия системные администраторы нередко сталкиваются с ситуацией, когда рабочие процессы rphost начинают бесконтрольно плодиться. В диспетчере задач или мониторе процессов операционной системы количество запущенных экземпляров исчисляется десятками, они потребляют оперативную память, нагружают процессор и в конечном итоге приводят к зависанию пользователей или сбою всей службы кластера.
Проанализируем детально, почему возникает такое поведение платформы, как локализовать сбойный процесс и какие параметры кластера серверов и операционной системы необходимо скорректировать для стабильной работы.
Кластер серверов 1С устроен так, что менеджер кластера (rmngr) непрерывно опрашивает рабочие процессы (rphost). Если процесс перестает отвечать, зависает в системных вызовах или превышает заданные лимиты потребления памяти, кластер пытается вывести его из эксплуатации, помечая как неактивный (выключенный), и параллельно создает новый замещающий рабочий процесс для обслуживания клиентских подключений.
Рассмотрим ключевые факторы, из-за которых старые процессы не могут завершиться и накапливаются в памяти:
rphost не может выгрузиться из памяти, а для новых подключений создаются свежие процессы.CPU Ready Time), включенные механизмы динамического энергосбережения или некорректное распределение NUMA-узлов приводят к микрозадержкам гостевой ОС. Менеджер кластера не получает вовремя контрольный сигнал (heartbeat) от rphost, считает процесс зависшим и спавнит новый.rphost.Для предотвращения бесконтрольного накопления неактивных и зависших процессов настроим свойства кластера в консоли администрирования (утилита ras или оснастка MMC):
86400 (перезапуск раз в сутки).Обратим внимание на параметры масштабирования процессов в свойствах рабочего сервера:
1, платформа будет выделять отдельный rphost под каждую информационную базу. Если на сервере развернуто несколько десятков баз, это автоматически создаст соответствующее количество процессов, увеличивая накладные расходы на межпроцессное взаимодействие. Для серверов с большим числом баз оптимально оставлять значение по умолчанию (0 — без ограничений).Если сервер 1С развернут на базе виртуальной машины (например, VMware vSphere), выполним тонкую настройку окружения:
High Performance), отключив глубокие состояния энергосбережения процессора (C-states).KeepAliveTime и KeepAliveInterval), чтобы сервер быстрее сбрасывал "мертвые" сокеты пользователей, потерявших связь.Если после включения принудительного завершения процессы продолжают регулярно падать и перезапускаться, соберем Технологический журнал платформы для выявления конкретного контекста ошибки.
Создадим минимальный файл конфигурации logcfg.xml в каталоге настроек платформы для отслеживания аварийных завершений и исключений:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\LOGS\1C_EXCP" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="PROC"/>
</event>
<property name="all"/>
</log>
</config>
События EXCP зафиксируют критические исключения, а события PROC покажут моменты запуска, остановки и принудительного уничтожения процессов rphost. Проанализировав логи, выясним, какой пользовательский сеанс, фоновое задание или внешняя компонента приводит к зависанию потока.