Как бороться с постоянно возрождающимися сеансами 1С на сервере?

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

Сталкиваясь с проблемами администрирования серверов 1С, мы можем обнаружить достаточно раздражающую ситуацию: когда, казалось бы, "мертвый" сеанс на сервере 1С упорно появляется вновь сразу после того, как мы его принудительно удалили (поможет контроль сбоев и прерывание сеансов 1С). Это явление, часто называемое "зомби-сеансом", может мешать проведению обновлений, монопольному доступу к базе или просто создавать лишнюю нагрузку и беспорядок в списке активных сеансов. В данном руководстве мы подробно разберем, почему возникают такие сеансы, и какие шаги мы можем предпринять для их окончательного устранения, а также для предотвращения их появления в будущем.

Понимание природы "неубиваемых" сеансов 1С

Для начала, давайте проанализируем, как проявляется эта проблема, исходя из обсуждения на форуме и нашего опыта:

  1. Сеанс висит на сервере и постоянно возрождается. Основная особенность проблемы заключается в том, что после принудительного удаления сеанса через консоль администрирования серверов 1С Предприятия, он практически мгновенно или через короткое время появляется вновь (сообщения 1, 12, 14). Это указывает на то, что существует некий механизм, который его постоянно перезапускает.
  2. Необычный характер сеанса. Зачастую такой сеанс имеет старую дату создания, не связан с активной работой конкретного пользователя и может быть помечен как "незавершенный" (сообщение 1, 5, 16). Автор темы изначально уточняет, что это не обычное фоновое задание в его понимании, но позже выясняет обратное.
  3. Поиск решения "в реальном времени". Важный аспект проблемы – это необходимость решить ее без полного перезапуска сервера 1С или СУБД, так как это может прервать работу других пользователей и бизнес-процессы (сообщение 1, 5).

Основная причина: регламентные задания с автозапуском

Ключевой момент, раскрытый в ходе обсуждения на форуме (сообщение 18), заключается в том, что очень часто причиной постоянно возрождающегося сеанса является регламентное (фоновое) задание, которое было настроено на автоматический перезапуск при аварийном завершении.

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

Чтобы разорвать этот порочный круг, мы должны остановить не сам сеанс, а регламентное задание, которое его порождает.

  1. Перейдите в раздел Администрирование вашей конфигурации 1С.
  2. Выберите пункт Обслуживание (или аналогичный, в зависимости от конфигурации).
  3. Найдите раздел Регламентные и фоновые задания.
  4. В открывшемся списке заданий мы должны идентифицировать то задание, которое соответствует "подвисшему" сеансу. Это может быть не всегда очевидно, но мы можем использовать следующие подсказки:
    • Имя пользователя: Если сеанс висит под техническим пользователем (например, DefUser или специальным служебным пользователем, созданным для интеграции), мы ищем регламентные задания, которые выполняются от его имени.
    • Длительность выполнения: Задания, которые постоянно перезапускаются, могут иметь очень короткое время выполнения или, наоборот, быть помечены как "выполняются" длительное время.
    • Назначение задания: Если мы знаем, какие фоновые процессы обычно выполняются в нашей системе, мы можем сузить круг поиска.
  5. Снимите флаг Включено для этого задания, чтобы предотвратить его автоматический перезапуск.
  6. После отключения задания, мы можем безопасно удалить сеанс через консоль администрирования серверов 1С Предприятия, и он не должен появиться вновь.
  7. Важно: Если мы не можем сразу определить, какое именно задание является причиной, возможно, придется последовательно отключать подозрительные задания и проверять, исчезает ли сеанс. После успешного удаления сеанса, мы не забываем вернуть остальные, несвязанные с проблемой, регламентные задания в рабочее состояние, если они были временно отключены.

Иногда, как указано в сообщении 18, может потребоваться просто дождаться, когда фоновое задание завершит свое выполнение самостоятельно. Если оно завершится корректно, сеанс DefUser отключится автоматически, и не будет необходимости вмешиваться в его работу, если цель не получение монопольного доступа.

Дополнительные причины и расширенные методы борьбы

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

1. "Подвисший" рабочий процесс на сервере (rphost.exe)

Каждый сеанс в 1С обслуживается отдельным рабочим процессом rphost.exe на сервере. Иногда, из-за внутренних ошибок платформы, сбоев в сети или некорректно написанного кода, этот процесс может "зависнуть". При попытке удалить сеанс через консоль кластера, сама консоль отправляет команду на завершение, но зависший процесс rphost.exe не может ее корректно обработать. Спустя некоторое время система может снова отобразить этот сеанс, так как основной процесс для него все еще активен.

  1. В консоли администрирования серверов 1С Предприятия (поможет универсальный инструмент администрирования 1С и процессов) мы можем просмотреть PID (идентификатор процесса) рабочего процесса, который обслуживает проблемный сеанс. Для этого мы выбираем проблемный сеанс и изучаем его свойства.
  2. Далее, на сервере 1С, где запущен рабочий процесс, мы открываем Диспетчер задач.
  3. Переходим на вкладку Подробности или Процессы (в зависимости от версии операционной системы).
  4. Находим процесс rphost.exe с соответствующим PID и принудительно завершаем его, используя функцию Завершить задачу или Снять задачу. Это является более жестким, но часто эффективным методом.
  5. После завершения процесса сеанс в консоли 1С должен исчезнуть.

2. Блокировки на уровне СУБД

Сеанс может инициировать длительную транзакцию, которая создает блокировку на уровне таблиц в базе данных (например, MS SQL Server или PostgreSQL). Если сеанс завершается некорректно, блокировка в СУБД может остаться. Это иногда приводит к тому, что система 1С не может корректно убрать запись о сеансе, или же при попытках других операций, связанных с заблокированными данными, "фантомный" сеанс появляется снова.

  1. С помощью средств управления вашей СУБД (например, SQL Server Management Studio для MS SQL Server, pgAdmin или командной строки для PostgreSQL) мы можем проанализировать текущие активные транзакции и блокировки.
  2. Если обнаружена блокировка, созданная проблемным сеансом 1С, мы можем ее принудительно снять на стороне SQL-сервера. Будьте крайне осторожны при выполнении этого шага, так как некорректное снятие блокировок может привести к повреждению данных. Настоятельно рекомендуется предварительно выполнить резервное копирование базы данных.
  3. После снятия блокировки повторите попытку удаления сеанса в консоли 1С.

3. Внешние подключения с автоматическим переподключением

Сеанс мог быть создан не пользователем, а внешним приложением, которое интегрировано с 1С через COM-соединение или веб-сервисы. Если такое приложение настроено на постоянное поддержание связи и автоматическое переподключение при обрыве, то после принудительного удаления сеанса оно просто создаст новый, что выглядит как его "возрождение".

  1. Выясните, какие внешние системы интегрированы с 1С и могут создавать активные сеансы (например, сторонние ERP, CRM, веб-порталы, мобильные приложения).
  2. Если такое приложение существует и подозревается в создании "зомби-сеансов", временно остановите его работу или настройте так, чтобы оно не пыталось немедленно переподключиться после обрыва связи.
  3. После остановки внешнего приложения удалите сеанс в консоли 1С.
  4. После успешного удаления сеанса, мы можем снова запустить внешнее приложение. Возможно, потребуется перенастроить его параметры соединения с 1С.

4. Оборванные сетевые соединения и таймауты

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

  1. Хотя это и не совсем "возрождение", а скорее длительное "зависание", мы можем проверить стабильность сетевого соединения между клиентскими машинами и сервером 1С.
  2. Мы можем настроить параметры информационной базы для более быстрого завершения неактивных сеансов, как будет описано в разделе о профилактических мерах.

5. Использование утилиты командной строки rac

Для клиент-серверного варианта 1С Предприятия существует мощная утилита командной строки rac (RAC – RAbbitMQ Administration Console, но в контексте 1С это 1C:Enterprise Server Administration Console), которая позволяет управлять кластером серверов, включая завершение сеансов — для этого есть завершение сеансов 1С по расписанию. Этот метод является более низкоуровневым и часто более эффективным для завершения "упорных" сеансов.

  1. Откройте командную строку на сервере 1С с правами администратора.
  2. Для завершения сеанса мы можем использовать команду: rac session terminate --cluster <UUID_кластера> --session <UUID_сеанса>.
  3. Чтобы получить список кластеров и сеансов с их уникальными идентификаторами (UUID), мы можем использовать команды rac cluster list и rac session list --cluster <UUID_кластера> соответственно.
  4. После идентификации нужного сеанса по его UUID, мы можем выполнить команду на завершение.

6. Профилактические меры: настройка таймаутов сеансов

Для предотвращения подобных ситуаций в будущем и автоматической очистки системы от неактивных и "подвисших" соединений, мы можем оптимизировать настройки информационной базы.

  1. В консоли администрирования серверов 1С Предприятия, в свойствах информационной базы, обратите внимание на следующие параметры, которые находятся на вкладке Свойства или Настройки:
    • Время засыпания пассивного сеанса: Этот параметр определяет, через сколько минут неактивный сеанс (в котором нет пользовательских действий) перейдет в "спящее" состояние.
    • Время завершения спящего сеанса: Этот параметр определяет, через сколько минут "спящий" сеанс будет принудительно завершен сервером 1С.
  2. Установите разумные значения для этих параметров, чтобы обеспечить своевременное освобождение ресурсов. Например, Время засыпания пассивного сеанса можно установить в 10-15 минут, а Время завершения спящего сеанса в 30-60 минут. Это позволит серверу 1С автоматически быстрее очищать систему от неактивных соединений, уменьшая вероятность появления "зомби-сеансов".

Борьба с постоянно возрождающимися сеансами 1С требует системного подхода и понимания потенциальных причин. Начиная с проверки регламентных заданий, как наиболее частой причины, и заканчивая низкоуровневой диагностикой процессов и блокировок, мы можем эффективно устранить эту проблему и обеспечить стабильную работу нашей системы 1С.

← На главную