Как исправить ошибку снятия блокировки и нестабильную работу кластера 1С в серверном режиме

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

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

Анализ программной ошибки в конфигурации КА 2.4

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

Выясним причину такого поведения. В клиент-серверном варианте 1С более жестко контролирует механизм объектных блокировок. Рассмотрим фрагмент кода, который вызывает сбой (согласно стеку вызовов из технологического журнала):


Процедура ОтменитьВыполнениеЗаданияНаСервере()
    // ... логика обработки
    РабочееМестоРаботникаСкладаСервер.ОтменитьВыполнениеЗадания(ЭтаФорма);
КонецПроцедуры

Проблема заключается в том, что при выполнении метода ДокументОбъект.Записать() или при явном вызове разблокировки, система пытается освободить ресурс, который не был предварительно заблокирован методом ЗаблокироватьДанныеДляРедактирования(). В файловой базе 1С часто "прощает" такие несоответствия, но на сервере rphost это приводит к немедленной остановке выполнения транзакции.

Для решения этой проблемы в коде необходимо добавить проверку на наличие блокировки или обернуть вызов в конструкцию попытки. Однако правильным решением будет обновление конфигурации до релизов ветки 2.4.6 и выше, где логика взаимодействия с блокировками в РМРС была переработана вендором.

Диагностика нестабильности кластера через технологический журнал

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


42:51.594085-0,EXCP,0,process=rphost,OSThread=6372,Exception=ba8a0cd1-c2cc-4b84-a837-a0dda720ff4e,
Descr='src\RHostImpl.cpp(5855): ba8a0cd1-c2cc-4b84-a837-a0dda720ff4e: 
Не найдено ни одного сервера с размещенным сервисом serviceName=ClusterLockService;'

Разберем, что означает эта запись. ClusterLockService — это внутренний сервис менеджера кластера (rmngr), отвечающий за координацию блокировок между всеми рабочими процессами. Если rphost (рабочий процесс) не может достучаться до этого сервиса, он не понимает, свободен объект или нет. В результате система выдает неадекватные сообщения о том, что база заблокирована Конфигуратором или другим пользователем, хотя фактически это не так.

Проанализируем причины "потери" сервиса блокировок:

  1. Нестабильность платформы: Версии 8.3.11 и 8.3.12 имели известные баги утечки памяти в сервисе управления сеансами. Рекомендуется обновить платформу до стабильных релизов (например, 8.3.15.1830 или актуальных веток 8.3.18+).
  2. Проблемы с IPv6: Часто менеджер кластера пытается связаться с сервисом по протоколу IPv6, который некорректно настроен в локальной сети или на виртуальном хосте.
  3. Разрыв сетевых соединений: На виртуальных машинах кратковременные задержки сети могут приводить к тому, что rphost помечает соединение с rmngr как разорванное.

Оптимизация серверной инфраструктуры и виртуализации

Если сервер 1С и SQL развернуты на виртуальных машинах (например, VMware), необходимо обратить внимание на системные логи Windows. Записи вида vmGuestLibrary is successfully initialized и предупреждения о NUMA узлах указывают на специфику работы в виртуальной среде.

Рассмотрим шаги по стабилизации сервера:

  1. Настройка памяти (Memory Reservation): Для серверов 1С и SQL крайне важно установить параметр Reservation в настройках виртуальной машины в размере 100% выделенной оперативной памяти. Это предотвратит "свопинг" (выгрузку памяти на диск хоста), который вызывает микро-задержки, критичные для сервиса блокировок 1С.
  2. Отключение IPv6: В свойствах сетевого адаптера на сервере 1С и сервере SQL следует отключить протокол IPv6. Также рекомендуется добавить жесткую привязку IP к имени сервера в файле C:\Windows\System32\drivers\etc\hosts. Это гарантирует, что процессы 1С всегда будут находить друг друга по стабильному адресу.
  3. Ограничение памяти SQL Server: Поскольку SQL Server и сервер 1С часто потребляют почти всю доступную память (например, 30 ГБ из 32 ГБ), системе не остается ресурсов для работы самой ОС и кэширования вызовов. Обязательно ограничьте Max Server Memory в настройках MS SQL Server, оставив минимум 4-6 ГБ свободными для нужд сервера 1С и операционной системы.

Решение проблемы взаимовлияния баз через рабочие процессы

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

Для устранения этой проблемы выполним следующие действия в консоли администрирования серверов 1С:

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

← На главную