Как диагностировать и устранить высокую нагрузку на процессор от процессов rphost в ночное время?

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

Каждый системный администратор крупных систем 1С рано или поздно сталкивается с загадочным поведением сервера: в рабочее время при активных 80–100 пользователях сервер чувствует себя отлично, нагрузка на процессор не превышает умеренных значений. Однако ровно в 17:30 или 18:00, когда сотрудники покидают свои рабочие места, нагрузка от процессов rphost.exe резко возрастает до 95–100% и держится в таком состоянии до самого утра, не утихая даже в выходные дни.

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

Почему процессор перегружается именно ночью и в выходные?

Для понимания природы проблемы проанализируем поведение сервера в течение суток. В этой временной логике нет мистики, она объясняется базовыми механизмами работы СУБД и сервера приложений 1С:

  1. Транзакционные блокировки в рабочее время. Днем, когда пользователи активно вводят, проводят и изменяют документы, система находится в состоянии постоянной конкуренции за ресурсы. Ресурсоемкие фоновые и регламентные задания, пытающиеся выполниться днем, натыкаются на транзакционные блокировки (как на уровне СУБД, так и на уровне объектных блокировок 1С). Они вынуждены ожидать освобождения таблиц, переходить в состояние сна или выполняться крайне медленно. В результате потоки процессора простаивают в ожидании, и общая загрузка CPU остается умеренной.
  2. Свободный коридор при отсутствии пользователей. Как только рабочее время заканчивается и пользователи выходят из баз данных, блокировки исчезают. Накопившаяся очередь фоновых задач получает монопольный доступ к таблицам базы данных. Процессы rphost начинают без задержек обрабатывать ресурсоемкий код, что мгновенно нагружает процессор «в полку».
  3. Сброс регламентных заданий после обновлений. При обновлении конфигураций (особенно использующих БСП — Библиотеку стандартных подсистем) настройки расписаний регламентных заданий могут автоматически сбрасываться к значениям по умолчанию. Некоторые тяжелые сервисные задания по умолчанию настроены на запуск каждые 10 секунд. Наличие десятков баз на сервере с такими настройками создает огромный кумулятивный оверхед.

Шаг 1. Локализация проблемной базы методом разделения процессов rphost

Когда на сервере развернуто несколько десятков баз (например, рабочие, тестовые, архивные), крайне сложно понять, какая именно из них утилизирует процессор. По умолчанию в кластере 1С несколько информационных баз обслуживаются одними и теми же рабочими процессами rphost.

Для того чтобы сопоставить конкретную базу с нагружающим систему процессом, настроим режим «один процесс на одну базу». Разберем этот процесс по шагам:

  1. Откроем консоль Администрирование серверов 1С Предприятия.
  2. Перейдем в ветку нашего кластера и выберем пункт Рабочие серверы.
  3. Откроем свойства нужного рабочего сервера.
  4. Найдем параметр Количество ИБ на процесс (по умолчанию там может стоять значение 0 или большее число).
  5. Установим значение этого параметра равным 1.
  6. Применим изменения и при необходимости перезапустим службу сервера 1С (хотя изменения могут вступить в силу динамически по мере запуска новых процессов).

После применения этой настройки для каждой активной информационной базы будет запущен свой собственный процесс rphost.exe со своим уникальным идентификатором (PID). Теперь во время ночного пика нагрузки нам достаточно открыть диспетчер задач операционной системы или мониторинг Zabbix, определить PID процесса, который загружает CPU на 100%, и найти этот PID в консоли администрирования 1С в списке рабочих процессов, чтобы сразу увидеть имя проблемной базы.

Шаг 2. Мониторинг сеансов в консоли администрирования

После того как мы определили проблемную информационную базу, проанализируем, какие именно сеансы работают в ней в период пиковой нагрузки. Рассмотрим алгоритм действий:

Шаг 3. Анализ и отключение регламентных заданий

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

Зайдем в проблемную базу под правами администратора и перейдем в раздел Администрирование — Обслуживание — Регламентные и фоновые задания. Проанализируем список заданий:

В качестве временной диагностической меры мы можем полностью отключить выполнение регламентных заданий на уровне всей информационной базы через консоль администрирования кластера 1С. Для этого откроем свойства информационной базы в консоли и установим флажок Блокировка регламентных заданий включена. Если после этого ночная нагрузка исчезнет, мы гарантированно нашли виновника и можем переходить к точечной настройке расписаний конкретных заданий.

Шаг 4. Настройка Технологического журнала для глубокого анализа

Если визуальный мониторинг не дает результатов, и мы все еще не знаем, какой именно кусок кода или запрос вызывает пиковую нагрузку, настроим Технологический журнал (ТЖ). Это самый мощный и детальный инструмент расследования проблем производительности в 1С.

Создадим файл конфигурации logcfg.xml в каталоге настроек технологического журнала (по умолчанию для 64-битной платформы на Windows это каталог C:\Program Files\1cv8\conf\). Настроим сбор событий длительных запросов и процессорного времени. Рассмотрим пример файла конфигурации:


<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\Logs\1C\rphost_cpu" history="12">
        <event>
            <eq property="Name" value="DBMSSQL"/>
            <gt property="Duration" value="5000000"/>
        </event>
        <event>
            <eq property="Name" value="SDBL"/>
            <gt property="Duration" value="5000000"/>
        </event>
        <event>
            <eq property="Name" value="EXCP"/>
        </event>
        <property name="all"/>
    </log>
</config>

В данном примере конфигурационный файл ТЖ будет записывать информацию о запросах к СУБД (DBMSSQL) и запросах к объектной СУБД 1С (SDBL), длительность выполнения которых превышает 5 секунд (5 000 000 микросекунд), а также фиксировать все возникающие исключительные ситуации (EXCP). Анализируя полученные лог-файлы утром, мы сможем точно определить проблемный кусок кода, имя выполняемой процедуры или SQL-запрос, который перегружал систему ночью.

Резюме и чеклист для администратора

Высокая ночная активность процессов rphost — это нормальное поведение сервера 1С, на котором настроена автоматизация обслуживания баз или асинхронные алгоритмы (такие как расчет прав доступа в 1С:ДО). Для быстрого устранения этой проблемы воспользуемся простым алгоритмом:

  1. Разделим базы по отдельным процессам rphost, установив параметр Количество ИБ на процесс = 1 в свойствах сервера.
  2. Определим PID нагружающего процесса и вычислим имя «тяжелой» информационной базы.
  3. Временно заблокируем регламентные задания для этой базы, чтобы подтвердить наши догадки.
  4. Проверим расписание регламентных заданий в режиме «1С:Предприятие». Отрегулируем слишком частые задания (каждые 10 секунд), перенесем тяжелые задачи на менее критичное время или увеличим интервал их запуска.
  5. При необходимости соберем логи Технологического журнала для выявления конкретных неоптимальных запросов.
← На главную