В процессе эксплуатации высоконагруженных систем 1С часто возникает проблема «зависших» сеансов, которые блокируют доступ к данным или таблицам базы, но при этом остаются активными в списке пользователей. В данной статье мы разберем, как эффективно управлять сессиями пользователей, какие существуют методы для их завершения и как минимизировать негативное влияние «мертвых» сеансов на работу предприятия.
Прежде чем приступать к принудительному завершению сессий, важно проанализировать, почему они возникают. Зависание сеанса — это чаще всего следствие конфликтов блокировок на уровне SQL Server или нехватки системных ресурсов на сервере приложений. Если сеанс пользователя завис, это не всегда означает, что программа «сломалась». Зачастую сеанс ожидает завершения транзакции, и попытка грубого вмешательства может привести к повреждению данных или сбою в работе других пользователей, работающих в том же rphost (рабочем процессе).
Если ваша инфраструктура позволяет использовать актуальные версии платформы 1С:Предприятие (начиная с 8.3.14), для работы с сессиями рекомендуется использовать встроенный объект АдминистрированиеСеанс. Этот метод позволяет завершать сессии напрямую из кода конфигурации без необходимости подключения внешних тяжеловесных библиотек.
Рассмотрим пример того, как можно завершить сеанс программно:
// Пример использования метода для завершения текущего сеанса
// или управления сессиями (в контексте прав администратора кластера)
Сеанс = ПолучитьТекущийСеанс();
Если ПроверитьУсловияДляЗавершения(Сеанс) Тогда
Сеанс.ЗавершитьСеанс("Завершение сеанса по регламенту системы из-за отсутствия активности.");
КонецЕсли;
Этот подход предпочтительнее, так как он корректно сообщает платформе о необходимости закрытия сессии, позволяя системе правильно обработать разрыв связи с сервером.
Вместо того чтобы бороться с последствиями в виде зависших сеансов, лучше настроить сервер 1С так, чтобы он самостоятельно следил за здоровьем процессов. Разберем основные настройки в консоли администрирования кластера серверов:
rphost. Это позволяет очистить память и принудительно «выкинуть» зависшие сеансы, которые накопили критические ошибки.Такой подход обеспечивает миграцию активных пользователей на другие рабочие процессы, минимизируя риск потери данных, в то время как «протухшие» сеансы будут аннигилированы при перезагрузке процесса.
Если использование COMConnector для вас нежелательно из-за времени на инициализацию или ограничений по версии, используйте утилиту командной строки rac.exe (Remote Administration Console). Это штатное средство 1С, которое работает независимо от процесса предприятия.
Вы можете вызывать rac.exe из скриптов PowerShell или через ЗапуститьСистему. Это позволяет быстро получить список сеансов, отфильтровать их по времени создания или пользователю и завершить нужные процессы без нагрузки на сервер приложений, характерной для COM-объектов.
Если вы хотите предотвратить дублирование сеансов одним пользователем, можно реализовать проверку при старте системы:
ПриНачалеРаботыСистемы) выполняйте проверку количества активных сеансов данного пользователя.Технологический журнал для отслеживания всех подобных ситуаций. Это поможет выявить, почему сеанс не завершился корректно при выходе пользователя из программы (например, из-за аварийного завершения или «крестика» на окне клиента).Помните, что борьба с зависшими сеансами — это борьба с симптомами. Если проблема носит массовый характер, в первую очередь анализируйте Технологический журнал на предмет событий PROC и CLSTR, а также оптимизируйте запросы к базе данных, которые могут вызывать критические блокировки на уровне SQL Server.