Регламентное задание Отправка серверных оповещений клиентам: разбираемся в причинах тормозов и ищем способы оптимизации

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

В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП) версии 3.1.7 и выше, многие администраторы и разработчики столкнулись с неожиданной проблемой производительности. Пользователи начинают жаловаться на периодические «фризы» и общее замедление системы, особенно если работа ведется через веб-сервер. Виновником зачастую оказывается регламентное задание ОтправкаСерверныхОповещенийКлиентам. В этой статье мы подробно проанализируем, зачем нужно это задание, почему оно вызывает нагрузку и как правильно настроить систему, чтобы избавиться от тормозов.

Выясним причину: зачем нужно это регламентное задание?

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

  1. Оповещение о завершении фоновых заданий: когда пользователь запускает асинхронное выполнение длительных операций или тяжелый отчет в фоне, сервер должен как-то сообщить клиенту, что результат готов.
  2. Управление сеансами: администратор может отправить требование о завершении работы, и клиентское приложение должно мгновенно отреагировать.
  3. Изменение прав доступа: если права пользователя были изменены «на лету», система уведомляет об этом сеанс.
  4. Обновление конфигурации: уведомление пользователей о том, что версия программы изменилась (особенно если настроено автоматическое обновление конфигурации из хранилища) и необходимо перезапустить систему.

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

Почему система «тупит»: технические аспекты проблемы

Разберем по шагам, почему регламентное задание с интервалом в 60 секунд может парализовать работу, особенно в файловом варианте или при работе через веб-сервер (Apache/IIS):

1. Однопоточность сеанса на веб-сервере. Когда пользователь работает через веб-клиент или тонкий клиент по HTTP, обращения к серверу от одного сеанса часто сериализуются. Если регламентное задание запускает процесс проверки оповещений, основное окно пользователя может блокироваться до момента завершения этого фонового процесса (в этом поможет мониторинг и прерывание проблемных сеансов и фоновых заданий). Проанализируем нагрузку: если база данных долго отвечает на запрос задания, пользователь видит «песочные часы».

2. Блокировки в файловом режиме. В файловой базе данных любое регламентное задание, выполняющее запись или интенсивное чтение, может накладывать блокировки на таблицы. Учитывая, что задание ОтправкаСерверныхОповещенийКлиентам обращается к очередям сообщений, оно создает микро-конфликты блокировок каждые 60 секунд.

3. Дисковая активность. Пользователи часто замечают скачки нагрузки на диск. Это происходит из-за того, что задание сканирует таблицы регистрации изменений. Если индексы базы фрагментированы или данных в очереди накопилось много, простой опрос превращается в тяжелую дисковую операцию.

Проблема самовосстановления задания

Многие пытаются просто выключить это задание в консоли Регламентные и фоновые задания. Однако при следующем входе любого пользователя задание магическим образом включается снова с интервалом в 60 секунд. Посмотрим на логику БСП: в программном коде зашита проверка критически важных заданий. Если система видит, что ОтправкаСерверныхОповещенийКлиентам отключено, она инициализирует его принудительно. Это сделано для того, чтобы механизмы чатов и системных уведомлений не ломались из-за действий администраторов.

Решение №1: Использование Системы взаимодействия

Самый правильный и «штатный» способ разгрузить это регламентное задание — настроить Систему взаимодействия (Collaboration System). Рассмотрим, как это работает. Когда Система взаимодействия настроена (через сервер «1С:Диалог» или локальный сервер взаимодействия), функции доставки сообщений перекладываются на отдельный оптимизированный протокол (WebSocket). Регламентное задание в этом случае перестает выполнять роль «костыля» для доставки уведомлений и нагрузка практически исчезает.

Решение №2: Использование расширения для подавления инициализации

Если Система взаимодействия вам не нужна, а тормоза мешают работе, придется прибегнуть к программным методам. Чтобы задание не включалось само, нам нужно вмешаться в логику БСП через расширение. Разберем пример кода, который можно использовать в расширении для блокировки настройки задания.

Нам необходимо перехватить процедуру, отвечающую за обновление параметров работы программы. Рассмотрим пример реализации в общем модуле ОбщегоНазначенияБСП:


&Вместо("ПриОбновленииПараметровРаботыПрограммы")
Процедура ИмяПрефикс_ПриОбновленииПараметровРаботыПрограммы(Параметры)
    // Сначала выполняем стандартную логику
    ПродолжитьВызов(Параметры);
    
    // Затем находим наше задание и принудительно его настраиваем или отключаем
    МетаданныеЗадания = Метаданные.РегламентныеЗадания.ОтправкаСерверныхОповещенийКлиентам;
    Задание = РегламентныеЗадания.НайтиПоМетаданным(МетаданныеЗадания);
    
    Если Задание <> Неопределено Тогда
        // Устанавливаем более редкий интервал, например, раз в 15 минут (900 секунд)
        НовоеРасписание = Задание.Расписание;
        НовоеРасписание.ПериодПовтораВТечениеДня = 900; 
        
        Задание.Использование = Ложь; // Или оставляем Истина, но с редким интервалом
        Задание.Расписание = НовоеРасписание;
        Задание.Записать();
    КонецЕсли;
КонецПроцедуры

Важно: полное отключение может привести к тому, что пользователи перестанут получать системные уведомления. Рекомендуем вместо отключения просто увеличить интервал до 15–20 минут (900 или 1200 секунд).

Решение №3: Оптимизация веб-сервера

Если вы используете Apache или IIS, проанализируем настройки пулов соединений. Часто тормоза вызваны тем, что фоновое задание занимает свободный поток веб-сервера. Выполним следующие действия:

  1. Увеличьте количество рабочих процессов в настройках пула приложений (для IIS).
  2. Для Apache проверьте параметры KeepAlive и MaxClients.
  3. Убедитесь, что таймаут ожидания ответа сервера (TimeOut) установлен с запасом, чтобы долгие запросы от регламентного задания не «вешали» очередь.

Решение №4: Переход на Long Polling

Проанализируем версию вашей конфигурации. В последних релизах БСП (3.1.8 и выше) разработчики 1С значительно оптимизировали этот механизм, внедрив принцип Long Polling. Теперь задание не просто запускается каждую минуту, а удерживает соединение, ожидая данных. Если ваша 1С:Бухгалтерия 3.0 давно не обновлялась, обновление до актуального релиза может стать ключом к решению проблемы без вмешательства в код.

Резюме и рекомендации

Подведем итоги нашего исследования. Регламентное задание ОтправкаСерверныхОповещенийКлиентам — это «необходимое зло» для работы современных интерфейсов. Если вы столкнулись с тормозами:

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

← На главную