Разберем весьма неприятную и распространенную ситуацию, с которой сталкиваются системные администраторы и программисты при работе пользователей в базах на платформе 1С:Предприятие 8.3. Проанализируем ситуацию: пользователи работают через веб-клиент или терминальный доступ, в системе настроено ограничение на количество одновременных сеансов, но при попытке войти программа не позволяет выкинуть «старый» зависший сеанс. Если мы заглянем в консоль кластера или в список активных пользователей, то увидим там лишние сеансы, у которых висит активным ФоновоеЗадание. А в журнале регистрации мы найдем записи вида: «Фоновое задание. Начало (Поиск в динамическом списке)» и следом «Фоновое задание. Отмена». При этом само задание фактически не завершается, продолжая потреблять ресурсы и блокировать работу.
Рассмотрим подробнее, почему возникает эта проблема, какие механизмы платформы дают сбой и как мы можем комплексно решить данную задачу, не прибегая к грубому перезапуску веб-серверов.
Чтобы найти эффективное решение, детально проанализируем архитектуру платформы и факторы, приводящие к появлению «фантомных» фоновых заданий.
ФоновоеЗадание. Это сделано специально, чтобы интерфейс основного сеанса пользователя не блокировался «намертво», пока сервер выполняет тяжелый запрос. Если пользователь продолжает вводить символы или закрывает форму, платформа отправляет команду на отмену текущего поиска. В журнале регистрации фиксируется событие отмены, но из-за недоработок в релизах веток 8.3.8, 8.3.9 и 8.3.10 это задание не всегда корректно уничтожается на стороне сервера 1С.ОбновлениеИндексаППД, либо если сам индекс поврежден.Поскольку первопричина кроется в ошибке платформы при отмене фонового задания, самым надежным решением является переход на исправленный релиз. Разберем по шагам информацию о проблемных версиях:
Ошибочное поведение массово наблюдается на релизах веток 8.3.8 и 8.3.9 (например, 8.3.8.1784 и 8.3.9.1850). Также проблема была замечена в некоторых релизах ветки 8.3.10, таких как 8.3.10.2252.
Для полного устранения бага разработчики 1С выпустили исправления. Проанализируем рекомендации: необходимо обновить сервер и клиенты до версии не ниже 8.3.10.2375 (или использовать более современные и стабильные ветки, такие как 8.3.17, 8.3.21 и выше, в зависимости от требований вашей конфигурации). Обновление платформы устраняет саму ошибку некорректного завершения потока при отмене поиска.
Если прямо сейчас обновить платформу невозможно, рассмотрим административные меры обхода проблемы. Многим базам помогает полное перестроение индекса ППД.
Чистый и актуальный индекс полнотекстового поиска значительно ускорит обработку запросов, и фоновые задания будут успевать отрабатывать до того, как пользователь попытается их отменить или ввести новый символ.
Вместо грубого перезапуска службы веб-сервера (Apache или IIS), который прерывает работу вообще всех активных клиентов, применим более изящный метод очистки зависших заданий через консоль кластера серверов 1С. Для быстрого открытия необходимой оснастки можно использовать утилиту для запуска консоли кластера серверов 1С любых версий.
Разберем по шагам алгоритм "мягкой" перезагрузки рабочих процессов:
ФоновоеЗадание, а время начала сильно отстает от текущего.rphost принадлежат эти сеансы (запомним PID процесса).rphost и установим признак Не использовать (выберем "Использование: Не использовать").rphost.exe с нужным нам PID. Зависшие сеансы исчезнут, пользователи ничего не заметят.Пока технические проблемы с платформой решаются, проинструктируем пользователей о правильных подходах к поиску, чтобы минимизировать риск зависания. Разберем, как снизить нагрузку на базу:
Также разработчикам конфигурации имеет смысл провести аудит динамических списков: убрать лишние соединения таблиц, проверить наличие индексов в базе данных для тех полей справочников и документов, по которым чаще всего осуществляется строковый поиск.
Используя комплексный подход (обновление платформы до стабильного релиза, поддержку индексов в актуальном состоянии и точечное администрирование рабочих процессов), мы сможем полностью исключить проблему зависших фоновых заданий и обеспечить стабильную работу системы для всех пользователей.