В клиент-серверном варианте работы «1С:Предприятия» типовые конфигурации активно используют механизмы библиотеки стандартных подсистем (БСП) для асинхронного выполнения задач. Пользователи могут столкнуться с ситуацией, когда запуск отчетов, обработок или системных регламентных процедур (например, обновление списка регламентных заданий) зависает без вывода ошибок, при этом в консоли заданий новые процессы не отображаются, а в Журнале регистрации отсутствуют какие-либо записи.
Разберем детально механизм возникновения этой проблемы, методы её диагностики и шаги по полному восстановлению работоспособности системы.
Проанализируем поведение системы при запуске длительной операции. В типовых конфигурациях запуск асинхронных процедур выполняется через функции БСП:
ПараметрыПроцедуры = Новый Структура;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ДлительнаяОперация = ДлительныеОперации.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(
"МодульФоновыхЗаданий.ВыполнитьДействие",
ПараметрыПроцедуры,
ПараметрыВыполнения
);
При выполнении этого кода в сеансе пользователя менеджер кластера (rmngr) определяет рабочий сервер, который должен запустить процесс rphost для обработки фонового задания. Сбой и бесконечное зависание происходят по следующим причинам:
ragent на назначенном рабочем сервере: Если в многосерверном кластере настроены Требования назначения функциональности (ТНФ) и сервис фоновых заданий жестко привязан к конкретной ноде, остановка службы на этой ноде приводит к тому, что менеджер пытается передать вызов на неработающий сервер. Фоновое задание не создается, а клиентский сеанс переходит в режим бесконечного ожидания ответа.rphost или соединений: Когда все рабочие процессы перегружены или аварийно завершились из-за нехватки памяти (OOM / Access Violation), новые фоновые потоки блокируются до момента освобождения ресурсов.Для точного определения узла, на котором произошел сбой, выполним последовательную проверку инфраструктуры:
1C:Enterprise 8.3 Server Agent в Windows или srv1cv83 в Linux) на всех физических и виртуальных машинах, входящих в состав кластера. Убедимся, что на каждой ноде служба находится в статусе «Работает».rac. Перейдем в ветку «Рабочие серверы» и проверим доступность каждого сервера, а также актуальный статус рабочих процессов (rphost).EXCP, EXCPCNTX, CLSTR, SESN и SCALL.Разберем по шагам, как устранить зависание и исключить подобные ситуации в будущем:
ragent на сервере, где произошел сбой. Если служба зависла, принудительно завершим связанные процессы rphost, rmngr и ragent через диспетчер задач или системный монитор процессов, после чего выполним чистый старт службы.rphost: настроим интервал перезапуска (например, каждые 86400 секунд), ограничение по объему виртуальной памяти и порог времени неактивности, чтобы предотвратить накопление зависших потоков.Если сервер фоновых заданий недоступен, а пользователям требуется срочно сформировать отчеты или выполнить регламентные обработки, рассмотрим варианты прямого запуска без выделения фонового потока:
При вызове функций БСП передадим параметр, отключающий выполнение в фоне:
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ЗапуститьВФоне = Ложь;
ДлительнаяОперация = ДлительныеОперации.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(
"ОтчетыСервер.СформироватьОтчет",
ПараметрыОтчета,
ПараметрыВыполнения
);
В этом случае операция выполнится синхронно в рамках текущего клиентского сеанса без обращения к сервису фоновых заданий кластера.