В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП) версии 3.1.7 и выше, многие администраторы и разработчики столкнулись с неожиданной проблемой производительности. Пользователи начинают жаловаться на периодические «фризы» и общее замедление системы, особенно если работа ведется через веб-сервер. Виновником зачастую оказывается регламентное задание ОтправкаСерверныхОповещенийКлиентам. В этой статье мы подробно проанализируем, зачем нужно это задание, почему оно вызывает нагрузку и как правильно настроить систему, чтобы избавиться от тормозов.
Прежде чем бороться с механизмом, давайте разберем, какую роль он играет в системе и как работают фоновые задания и отслеживание результата их выполнения — есть система автоматического контроля и мониторинга регламентных заданий. Данное задание было введено для обеспечения оперативной связи между сервером и клиентским приложением. Рассмотрим основные функции, которые оно выполняет:
Проанализируем ситуацию: если это задание отключить, многие «сервисные» функции, включая длительные операции в БСП 3.1.8, перестанут работать корректно. Однако цена за это — ежеминутные задержки — часто оказывается слишком высокой.
Разберем по шагам, почему регламентное задание с интервалом в 60 секунд может парализовать работу, особенно в файловом варианте или при работе через веб-сервер (Apache/IIS):
1. Однопоточность сеанса на веб-сервере. Когда пользователь работает через веб-клиент или тонкий клиент по HTTP, обращения к серверу от одного сеанса часто сериализуются. Если регламентное задание запускает процесс проверки оповещений, основное окно пользователя может блокироваться до момента завершения этого фонового процесса (в этом поможет мониторинг и прерывание проблемных сеансов и фоновых заданий). Проанализируем нагрузку: если база данных долго отвечает на запрос задания, пользователь видит «песочные часы».
2. Блокировки в файловом режиме. В файловой базе данных любое регламентное задание, выполняющее запись или интенсивное чтение, может накладывать блокировки на таблицы. Учитывая, что задание ОтправкаСерверныхОповещенийКлиентам обращается к очередям сообщений, оно создает микро-конфликты блокировок каждые 60 секунд.
3. Дисковая активность. Пользователи часто замечают скачки нагрузки на диск. Это происходит из-за того, что задание сканирует таблицы регистрации изменений. Если индексы базы фрагментированы или данных в очереди накопилось много, простой опрос превращается в тяжелую дисковую операцию.
Многие пытаются просто выключить это задание в консоли Регламентные и фоновые задания. Однако при следующем входе любого пользователя задание магическим образом включается снова с интервалом в 60 секунд. Посмотрим на логику БСП: в программном коде зашита проверка критически важных заданий. Если система видит, что ОтправкаСерверныхОповещенийКлиентам отключено, она инициализирует его принудительно. Это сделано для того, чтобы механизмы чатов и системных уведомлений не ломались из-за действий администраторов.
Самый правильный и «штатный» способ разгрузить это регламентное задание — настроить Систему взаимодействия (Collaboration System). Рассмотрим, как это работает. Когда Система взаимодействия настроена (через сервер «1С:Диалог» или локальный сервер взаимодействия), функции доставки сообщений перекладываются на отдельный оптимизированный протокол (WebSocket). Регламентное задание в этом случае перестает выполнять роль «костыля» для доставки уведомлений и нагрузка практически исчезает.
Если Система взаимодействия вам не нужна, а тормоза мешают работе, придется прибегнуть к программным методам. Чтобы задание не включалось само, нам нужно вмешаться в логику БСП через расширение. Разберем пример кода, который можно использовать в расширении для блокировки настройки задания.
Нам необходимо перехватить процедуру, отвечающую за обновление параметров работы программы. Рассмотрим пример реализации в общем модуле ОбщегоНазначенияБСП:
&Вместо("ПриОбновленииПараметровРаботыПрограммы")
Процедура ИмяПрефикс_ПриОбновленииПараметровРаботыПрограммы(Параметры)
// Сначала выполняем стандартную логику
ПродолжитьВызов(Параметры);
// Затем находим наше задание и принудительно его настраиваем или отключаем
МетаданныеЗадания = Метаданные.РегламентныеЗадания.ОтправкаСерверныхОповещенийКлиентам;
Задание = РегламентныеЗадания.НайтиПоМетаданным(МетаданныеЗадания);
Если Задание <> Неопределено Тогда
// Устанавливаем более редкий интервал, например, раз в 15 минут (900 секунд)
НовоеРасписание = Задание.Расписание;
НовоеРасписание.ПериодПовтораВТечениеДня = 900;
Задание.Использование = Ложь; // Или оставляем Истина, но с редким интервалом
Задание.Расписание = НовоеРасписание;
Задание.Записать();
КонецЕсли;
КонецПроцедуры
Важно: полное отключение может привести к тому, что пользователи перестанут получать системные уведомления. Рекомендуем вместо отключения просто увеличить интервал до 15–20 минут (900 или 1200 секунд).
Если вы используете Apache или IIS, проанализируем настройки пулов соединений. Часто тормоза вызваны тем, что фоновое задание занимает свободный поток веб-сервера. Выполним следующие действия:
KeepAlive и MaxClients.Проанализируем версию вашей конфигурации. В последних релизах БСП (3.1.8 и выше) разработчики 1С значительно оптимизировали этот механизм, внедрив принцип Long Polling. Теперь задание не просто запускается каждую минуту, а удерживает соединение, ожидая данных. Если ваша 1С:Бухгалтерия 3.0 давно не обновлялась, обновление до актуального релиза может стать ключом к решению проблемы без вмешательства в код.
Подведем итоги нашего исследования. Регламентное задание ОтправкаСерверныхОповещенийКлиентам — это «необходимое зло» для работы современных интерфейсов. Если вы столкнулись с тормозами:
Помните, что комфортная работа пользователей напрямую зависит от баланса между скоростью системы и актуальностью доставляемых ей уведомлений.