При выполнении реструктуризации или обновлении конфигурации базы данных разработчики и системные администраторы нередко сталкиваются с ошибкой: система сообщает, что база занята другим монопольным соединением (например, сеансом Конфигуратора многодневной давности). При этом стандартный список сеансов и соединений в консоли администрирования кластера пуст, а автоматическое завершение соединений не срабатывает. Разберем по шагам, почему возникает эта проблема и как снять блокировку без остановки всей службы ragent.
Проанализируем ситуацию, которая приводит к зависанию монопольного режима. В платформе 1С:Предприятие за учет сеансов и управляемых блокировок отвечает менеджер кластера (rmngr), а выполнение пользовательского кода происходит в рабочих процессах (rphost). Рассинхронизация между ними возникает по следующим причинам:
rphost без оповещения менеджера: если рабочий процесс аварийно завершился («упал») или завис, rmngr продолжает считать зарегистрированные в нем соединения активными до истечения внутренних таймаутов пинга. В консоли управления такой процесс может отображаться со статусом «активный», оставаясь фактически «зомби».ESTABLISHED. Менеджер кластера ожидает ответа от клиента и продолжает удерживать исключительную блокировку метаданных.Если на сервере приложений работает несколько баз или пользователей, перезапуск всей службы ragent приведет к простою. Рассмотрим, как адресно устранить проблемный процесс:
PID).
taskkill /PID <PID_процесса> /F
или для ОС Linux:
kill -9 <PID_процесса>
rmngr сбросит удерживаемые им блокировки, после чего можно повторить обновление конфигурации.Поскольку графическая оснастка администрирования может скрывать фантомные сессии, воспользуемся консольной утилитой rac, работающей напрямую через службу администрирования ras. Разберем по шагам последовательность команд:
rac session list --cluster=<ID_кластера> --ibase=<ID_базы>
session) зависшего сеанса конфигуратора.
rac session terminate --cluster=<ID_кластера> --session=<ID_сеанса>
rac connection list и выполним отключение зависшего сокета через rac connection disconnect.Если проблема возникла на базе разработки или тестовом стенде, а доступ к консоли ОС ограничен, применим эффективный обходной маневр:
_temp).Чтобы свести к минимуму появление «зомби»-процессов и зависших блокировок в будущем, настроим параметры кластера и информационных баз:
86400 секунд (перезапуск раз в сутки). Это предотвратит деградацию процессов из-за фрагментации памяти.60 до 120 секунд. Если этот параметр равен 0, выключенные и проблемные процессы остаются в оперативной памяти бесконечно.25–50 соединений на один rphost).1200 сек) и Время завершения спящих сеансов (например, 86400 сек), чтобы сервер автоматически очищал потерянные клиентские подключения.