Ошибка «Не найдено ни одного сервера с размещенным сервисом» является одной из самых неприятных в практике системного администратора 1С. Она носит системный характер и означает, что менеджер кластера (процесс rmngr) по какой-то причине потерял связь с рабочим процессом (rphost), который должен обеспечивать работу конкретного функционала: сервиса сеансовых данных, сервиса лицензирования, сервиса блокировок или журнала регистрации.
Ситуация, описанная в теме, классическая: база «Бухгалтерия предприятия КОРП» (БП КОРП) на платформе 8.3.10, работающая под управлением 32-битного сервера 1С. При формировании тяжелых отчетов, таких как оборотно-сальдовая ведомость (ОСВ), или при массовом проведении документов сервер «падает», выкидывая всех пользователей. Разберем детально, почему это происходит, и как мы можем совместно решить эту проблему, двигаясь от самых вероятных причин к более сложным.
Проанализируем ситуацию с точки зрения ресурсов. Главная проблема здесь — использование 32-битного сервера 1С. В такой архитектуре каждый рабочий процесс rphost.exe может адресовать не более 2 ГБ оперативной памяти (в редких случаях до 3 ГБ при настройке /3GB в ОС, что не рекомендуется для стабильности). База конфигурации КОРП сама по себе очень требовательна к ресурсам. Когда пользователь запускает построение ОСВ за большой период, процесс rphost начинает стремительно потреблять память для обработки временных таблиц и подготовки данных. Как только объем данных превышает лимит в 2 ГБ, процесс аварийно завершается (крэшится).
Поскольку менеджер кластера ожидает от этого процесса выполнения сервиса (например, «Сервис сеансовых данных»), а процесс исчез, 1С выдает ту самую ошибку. Перезапуск службы временно решает проблему, но до следующего тяжелого отчета.
Первым делом нам необходимо защитить сервер от «неконтролируемого обжорства» процесса rphost. Даже если у вас 32-битная система, мы можем настроить кластер так, чтобы он вовремя перезапускал процессы, не дожидаясь их падения. Рассмотрим, какие параметры нужно изменить в консоли администрирования 1С:
500 000 КБ (около 500 МБ). Это предотвратит падение всего процесса из-за одного некорректного запроса.1 500 000 КБ. Это заставит менеджер кластера создавать новый рабочий процесс, когда старый приблизится к критической отметке.1 200 000 КБ.Эти настройки позволят кластеру более гибко управлять процессами rphost и предотвращать ситуацию, когда единственный процесс забивает всю доступную ему память и «вылетает».
Выясним причину, связанную с версией ПО. Версия платформы 8.3.10 давно признана устаревшей и содержит ряд известных ошибок (багов), связанных с утечками памяти в сервисе сеансовых данных. Если вы наблюдаете загрузку ЦП до 100% именно в момент ошибки, это может быть следствием бесконечного цикла в коде платформы при попытке восстановить разорванное соединение с сервисом.
Рассмотрим рекомендации по обновлению. Если бизнес-процессы позволяют, настоятельно рекомендуется перейти на версию 8.3.12 или выше (например, актуальные релизы 8.3.22 или 8.3.23). В новых версиях механизм взаимодействия между rmngr и rphost был существенно переработан, а работа с памятью оптимизирована под требования конфигураций на базе БСП 3.0 (к коим относится БП КОРП).
Проанализируем настройки сети. Часто ошибка «Не найдено ни одного сервера с размещенным сервисом» возникает из-за того, что 1С пытается использовать протокол IPv6 для внутреннего взаимодействия между процессами на разных (или даже на одном) виртуальных серверах. Если в системе включен IPv6, но он не настроен должным образом, возникают задержки (тайм-ауты), которые менеджер кластера интерпретирует как отсутствие сервиса.
Выполним следующие действия для стабилизации сети:
hosts (путь C:\Windows\System32\drivers\etc\hosts), добавив туда явное соответствие IP-адреса и имени сервера:
192.168.1.10 SERVER-1C
192.168.1.11 SERVER-SQL
Это исключит лишние запросы к DNS и ускорит поиск сервисов внутри кластера.
В крупных базах данных, таких как БП КОРП, мы можем явно указать системе, на каком сервере или процессе должен выполняться конкретный сервис. Если у вас несколько рабочих процессов, попробуйте настроить Требования назначения функциональности.
Разберем по шагам:
Иногда конфигурационные файлы кластера повреждаются из-за резкого завершения работы службы (например, при 100% загрузке ЦП и зависании). В этом случае помогает «жесткая» очистка. Внимание: это действие потребует повторного добавления информационных баз в список консоли, если вы удалите папку целиком.
Рассмотрим безопасный метод очистки кэша сервера:
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo (или иной путь, указанный при установке).snaccfg и временные файлы *.tmp. Удалите их.reg_1541 (но будьте готовы заново прописать пути к базам данных в консоли).Поскольку мы выяснили, что основной враг 32-битного сервера — нехватка памяти, нужно минимизировать фоновую нагрузку. В БП КОРП множество фоновых заданий работают одновременно с пользователями. Посмотрим на список регламентных заданий в базе. Задания типа «Извлечение текста», «Обновление индексов ППД», «Синхронизация данных» могут потреблять сотни мегабайт памяти.
Мы рекомендуем использовать следующий программный код для анализа и управления блокировками заданий в моменты пиковой нагрузки:
// Пример кода для программной блокировки регламентных заданий
Блокировка = РегламентныеЗадания.СоздатьБлокировкуУстановкиСоединений();
Блокировка.УстановитьИзменениеЗаблокировано(Истина);
Блокировка.Начало = ТекущаяДата();
Блокировка.Конец = ТекущаяДата() + 3600; // на один час
Блокировка.Сообщение = "Выполняется обслуживание сервера, подождите.";
УстановитьБлокировкуСеансов(Блокировка);
Также стоит настроить расписание так, чтобы тяжелые фоновые процессы выполнялись ночью, освобождая память для rphost пользователей в дневное время.
Подводя итог нашему анализу, можно сделать вывод: ошибка «Не найдено ни одного сервера с размещенным сервисом» в вашем случае — это крик системы о помощи из-за нехватки оперативной памяти. Процесс rphost просто не справляется с объемами данных БП КОРП в рамках 32-битного адресного пространства.
Главная рекомендация: Переход на 64-битный сервер 1С:Предприятие. Это снимет ограничение в 2 ГБ на процесс и позволит 1С использовать всю доступную оперативную память сервера (которой, как вы указали, достаточно). Если покупка лицензии на 64-битный сервер сейчас невозможна, используйте Шаг 1 (настройка лимитов) и Шаг 6 (оптимизация фоновых задач) как временную «терапию» для поддержания работоспособности системы.