Фоновые задания не дают запуститься серверу при рестарте: причины и решения

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

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

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

Суть проблемы: механизм "Лавины"

Давайте проанализируем, что происходит внутри сервера в момент старта. У нас есть сервер, на котором размещено порядка 30–50 информационных баз. Ресурсы ограничены (например, 24 ГБ ОЗУ), и на этом же сервере работает СУБД (MS SQL Server или PostgreSQL).

В штатном режиме работы задания запускаются по расписанию, распределенно во времени. Однако после простоя (остановки службы, перезагрузки сервера) происходит следующее:

  1. Планировщик заданий 1С в каждой информационной базе проверяет время последнего запуска регламентных заданий.
  2. Обнаружив, что многие задания были "пропущены" (должны были выполниться, пока сервер лежал), планировщик пытается запустить их одновременно, чтобы актуализировать данные.
  3. В память загружаются контексты десятков баз данных. Процессы rphost начинают стремительно потреблять оперативную память.
  4. СУБД (SQL Server) также пытается закешировать данные для выполнения запросов от этих заданий, конкурируя за память с сервером 1С.
  5. Операционная система фиксирует нехватку памяти (OOM — Out Of Memory) или замедление работы из-за активного свопинга (сброса данных на диск).
  6. Менеджер кластера 1С (rmngr) видит, что рабочий процесс rphost не отвечает или превысил лимиты, и принудительно завершает его, запуская новый.
  7. Новый процесс снова пытается запустить те же самые задания. Цикл замыкается.

Диагностика распределения памяти

Первым делом мы должны понять, как распределяются ресурсы. В рассматриваемом случае SQL Server и сервер 1С находятся на одной машине. Это классическая схема для небольших внедрений, но она требует строгой дисциплины в настройках.

Если SQL Server настроен по умолчанию, он стремится захватить всю доступную свободную память. Когда серверу 1С требуется память для выполнения кода 1С (внутри rphost), ему приходится "бороться" за ресурсы. Если память заканчивается, начинаются тормоза из-за дискового ввода-вывода (swap) или краши процессов.

Рассмотрим базовую математику для 30–50 баз. Даже если базы пустые, запуск контекста регламентного задания требует загрузки метаданных конфигурации. Для современной "Бухгалтерии 3.0" это сотни мегабайт на сеанс. Умножьте это на 30 одновременных потоков — 24 ГБ ОЗУ могут закончиться за секунды.

Решение 1: Увеличение интервала перезапуска процессов

Если увеличить физическую память прямо сейчас невозможно, нам необходимо дать системе "продышаться" и предотвратить принудительное убийство процессов менеджером кластера. Процесс может быть жив и работать (хоть и медленно из-за нагрузки на диск), но кластер считает его зависшим и убивает, начиная всё сначала.

Рассмотрим параметр кластера "Интервал перезапуска рабочих процессов" (или настройки контроля зависших процессов).

Что нужно сделать:

  1. Откройте консоль администрирования серверов 1С.
  2. Перейдите в свойства кластера или рабочего сервера (в зависимости от версии платформы настройки могут быть разнесены).
  3. Найдите параметры, отвечающие за принудительное завершение проблемных процессов. Обычно по умолчанию интервал составляет около 60 секунд.
  4. Увеличьте это значение значительно, например, до 1200 секунд (20 минут).

Почему это помогает: При старте системы и массовом запуске заданий нагрузка на диск (IOPS) возрастает колоссально. Процессы rphost работают медленно. Увеличивая интервал, мы говорим кластеру: "Не убивай процесс, даже если он тупит, дай ему время закончить инициализацию". Это позволяет заданиям выполниться (пусть и за 15 минут), после чего нагрузка спадает, и сервер входит в штатный режим.

Решение 2: Ограничение аппетитов SQL Server

Критически важно жестко ограничить память, доступную для СУБД, чтобы оставить гарантированный объем для процессов rphost.

Для MS SQL Server выполним следующие действия в Management Studio:

  1. Нажмем правой кнопкой на сервер в обозревателе объектов -> Properties (Свойства).
  2. Перейдем на вкладку Memory (Память).
  3. Установим параметр Maximum server memory.

Как рассчитать: Если у вас всего 24 ГБ, отдайте системе 4 ГБ, SQL Server — 8–10 ГБ, а остальное (10–12 ГБ) оставьте серверу 1С. Если вы не ограничите SQL, он может занять 20 ГБ, и при запуске 1С произойдет коллапс.

Решение 3: Оптимизация регламентных заданий

В типовых конфигурациях (особенно БП 3.0, ЗУП 3.1) существует множество заданий, которые включены по умолчанию, но могут быть не нужны в конкретной базе.

Что следует отключить в первую очередь:

  1. Обновление новостей: Это задание часто потребляет много памяти и трафика при старте. Если пользователям новости не критичны, отключите его.
  2. Полнотекстовый поиск (Извлечение текста): Процесс индексации и извлечения текста из файлов — один из самых прожорливых. Временно отключите его или настройте на запуск только ночью.
  3. Обновление классификаторов банков: Можно выполнять раз в неделю, а не при каждом старте.

Рассмотрим, как отключить задания не входя в каждую базу (если баз много). К сожалению, штатно это делается внутри базы в режиме "1С:Предприятие" (Администрирование -> Обслуживание -> Регламентные операции). Однако, можно использовать внешние обработки для группового управления или скрипты.

Решение 4: Протокол Shared Memory

Поскольку в нашем случае SQL Server и 1С:Предприятие установлены на одном физическом сервере, мы обязаны использовать протокол Shared Memory. Это исключает лишние накладные расходы на сетевой стек (TCP/IP через localhost) и копирование данных в памяти.

Как проверить и включить:

  1. Откройте SQL Server Configuration Manager.
  2. Перейдите в раздел SQL Server Network Configuration -> Protocols for [ИМЯ_ИНСТАНСА].
  3. Убедитесь, что протокол Shared Memory находится в состоянии Enabled.
  4. В свойствах подключения информационной базы в консоли 1С в поле "Сервер баз данных" просто укажите имя сервера (или (local)), без указания порта или IP-адреса, чтобы клиент SQL (используемый сервером 1С) мог выбрать Shared Memory автоматически.

Решение 5: Блокировка регламентных заданий на уровне консоли

Если проблема не уходит, существует радикальный, но действенный метод — запрет выполнения регламентных заданий на уровне свойств информационной базы в консоли кластера.

В свойствах каждой ИБ есть галочка "Блокировка регламентных заданий включена". Если она установлена, планировщик вообще не будет пытаться запускать задания.

Алгоритм действий для стабильного старта ("Ручной режим"):

  1. Установите эту блокировку для всех баз (или напишите скрипт, который делает это).
  2. Перезагрузите сервер. Служба 1С запустится мгновенно и легко, так как нагрузки не будет.
  3. Снимайте блокировку с баз постепенно (например, по 5 баз раз в 5 минут) или оставьте включенной для архивных баз.

Давайте рассмотрим пример кода на языке 1С (или VBS/PowerShell через COM), который может автоматизировать управление блокировкой, чтобы не "прокликивать" 30 баз вручную. Ниже пример логики скрипта, который можно адаптировать:


// Примерный алгоритм для административной обработки
СоединениеСАгентом = Новый COMОбъект("V83.COMConnector");
СоединениеСАгентом = СоединениеСАгентом.ConnectAgent("НашСервер");
Кластеры = СоединениеСАгентом.GetClusters();
Для Каждого Кластер Из Кластеры Цикл
    СоединениеСАгентом.Authenticate(Кластер, "Администратор", "Пароль");
    Базы = СоединениеСАгентом.GetInfoBases(Кластер);
    Для Каждого База Из Базы Цикл
        // Включаем блокировку, чтобы предотвратить автозапуск при рестарте
        База.ScheduledJobsDenied = Истина; 
        СоединениеСАгентом.UpdateInfoBase(База);
    КонецЦикла;
КонецЦикла;

Выводы и рекомендации

Ситуация, описанная автором, типична для "уплотнения" серверов. Главная причина — конкуренция за память и агрессивное поведение планировщика заданий при старте.

Итоговый чек-лист действий:

  1. Срочно: Увеличить таймаут перезапуска рабочих процессов в настройках кластера (до 1000–1200 секунд). Это позволит пережить "шторм" загрузки.
  2. Настройка SQL: Жестко ограничить Max Server Memory.
  3. Оптимизация: Включить протокол Shared Memory.
  4. Гигиена баз: Отключить "Новости" и полнотекстовый поиск в базах, где это не нужно.
  5. Планирование: При наличии возможности — разнести время выполнения "тяжелых" регламентных заданий в разных базах, чтобы они не стартовали все в 9:00 или при старте сервера.

Также стоит помнить, что версии платформы 1С регулярно обновляются. В некоторых релизах могут присутствовать ошибки утечки памяти (Memory Leaks). Если вышеописанные меры не помогают, имеет смысл протестировать работу на другой версии платформы (более новой или, наоборот, более стабильной LTS-версии).

← На главную