Каждый системный администратор и специалист 1С рано или поздно сталкивается с загадочным поведением серверной инфраструктуры. Одна из самых неприятных ситуаций — когда сервер 1С:Предприятие работает стабильно в течение рабочего дня, но ночью регулярно «замирает» на определенное время (например, на час). При этом пользователи, пытающиеся зайти в систему, видят бесконечно вращающееся синее колесико ожидания на этапе авторизации, а в технологическом журнале и журнале регистрации царит полная тишина.
В этой статье мы подробно разберем, почему происходят подобные зависания платформы 1С (на примере релизов 8.3.13 и 8.3.14), проанализируем неочевидные системные причины и предоставим готовые практические инструменты для решения этой проблемы.
Прежде чем перейти к методам устранения неисправности, давайте зафиксируем ключевые признаки, которые указывают на системный сбой взаимодействия компонентов:
Давайте пошагово рассмотрим основные причины этой неполадки и разберем практические способы их устранения.
Проанализируем ключевое открытие, к которому пришли специалисты в процессе решения проблемы. Очень часто для ночного обслуживания баз данных, резервного копирования или перезапуска служб используются скрипты, запускаемые через встроенный Планировщик задач Windows (Task Scheduler).
Если служба 1C:Enterprise 8.3 Server Agent и задача в Планировщике Windows запущены под одной и той же доменной или локальной учетной записью, при определенных условиях (например, при попытке остановить службу из-под этого же пользователя) возникает конфликт прав и блокировка системных дескрипторов процессов в ОС Windows. Это приводит к тому, что служба переходит в «подвешенное» состояние, не реагируя на внешние запросы.
Что необходимо сделать:
services.msc) и проверьте, под каким пользователем запускается служба 1С.Как показывает практика, разделение учетных записей полностью исключает замирания, вызванные конфликтом безопасности Windows в момент переинициализации рабочих процессов.
Обычный быстрый перезапуск службы (командами типа «restart») часто отрабатывает некорректно. За несколько секунд операционная система не успевает корректно выгрузить все рабочие процессы rphost.exe, закрыть их сетевые сокеты и освободить файлы блокировок. В результате служба пытается стартовать заново, когда старые «зомби-процессы» еще удерживают порты.
Чтобы избежать этого, необходимо использовать специальный скрипт, который выполняет гарантированную последовательную остановку, ожидает завершения всех процессов и только после этого осуществляет запуск.
Рассмотрим пример проверенного cmd/bat-скрипта, который решает эту проблему:
@echo off
set logfile="C:\script\stopstartlog.txt"
echo %date% %time% >> %logfile%
rem Останавливаем службу сервера 1С
net stop "1C:Enterprise 8.3 Server Agent (x86-64)" >> %logfile%
rem Выжидаем технологическую паузу (около 15 секунд) для завершения потоков
ping -n 16 localhost > Nul
echo %date% %time% >> %logfile%
rem Запускаем службу сервера 1С заново
net start "1C:Enterprise 8.3 Server Agent (x86-64)" >> %logfile%
rem Даем время на инициализацию службы перед проверкой
ping -n 301 localhost > Nul
SetLocal EnableExtensions
Set ProcessName=1C:Enterprise 8.3 Server Agent (x86-64)
rem Проверяем, запустился ли агент. Если нет — принудительно стартуем его снова
TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
If %ErrorLevel% NEQ 0 net start "1C:Enterprise 8.3 Server Agent (x86-64)"
exit
Если даже при использовании скрипта задержки процессы rphost.exe или rmngr.exe зависают в памяти намертво (что особенно характерно для платформ 8.3.13.1690), необходимо внедрить в ночной регламент жесткое уничтожение задач (Kill Task) и очистку временных файлов сеансовых данных.
При некорректном завершении сессий файлы в каталоге сеансовых данных snccntx могут оказаться поврежденными. При последующем старте менеджер кластера тратит колоссальное количество времени на попытки восстановить эти данные, что и вызывает часовое зависание на «синем колесике».
Давайте усовершенствуем наш подход и добавим очистку кэша сеансов в процедуру обслуживания. Шаги реализации:
Для этого можно использовать следующий набор команд в вашем системном скрипте:
rem Останавливаем службу
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
rem Принудительно завершаем зависшие процессы, если они остались
taskkill /f /im rphost.exe
taskkill /f /im rmngr.exe
taskkill /f /im ragent.exe
rem Выдерживаем паузу
ping -n 10 localhost > Nul
rem Очищаем кэш сеансовых данных (путь может отличаться в зависимости от настроек)
del /f /q /s "C:\Program Files\1cv8\srvinfo\reg_1541\snccntx*"
rem Запускаем службу
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
Важное примечание: Очистка папки snccntx сбрасывает текущие активные сеансы пользователей, поэтому выполнять эту операцию можно только ночью, когда гарантированно завершены все критически важные транзакции и регламентные задания в базах данных.
Часто системные администраторы смотрят только на общую загрузку процессора (например, видят 5–10% утилизации CPU) и делают ошибочный вывод о том, что сервер простаивает. Однако узким горлышком практически всегда выступает дисковая подсистема.
Если в момент зависания 1С на сервере выполняются тяжелые дисковые операции (например, создание резервной копии базы данных SQL средствами СУБД, дефрагментация индексов или антивирусное сканирование), длина очереди диска может вырасти до критических значений. В этот момент время отклика на чтение/запись увеличивается до сотен миллисекунд. Платформа 1С, чувствительная к задержкам файловой системы, просто перестает отвечать на запросы авторизации клиентов.
Проанализируем производительность дисков с помощью встроенного монитора Windows:
resmon).В такой ситуации перенесите время проведения регламентных операций СУБД так, чтобы они не пересекались по времени с моментами перезапуска службы 1С и работы пользователей.
При запуске клиента 1С перед выводом формы авторизации платформа всегда выполняет поиск доступных программных или аппаратных лицензий. Если на предприятии используются сетевые HASP-ключи, по умолчанию платформа ищет их с помощью широковещательных запросов (broadcast) по всей локальной сети.
Если в ночные часы сеть перегружена бэкапами или сегменты сети временно недоступны из-за перезагрузки сетевого оборудования, широковещательный поиск уходит в глубокий таймаут (который может длиться до нескольких минут на одно подключение). Для конечного пользователя это выглядит как зависание программы.
Чтобы исключить этот фактор, необходимо жестко прописать адрес сервера лицензирования в файле конфигурации nethasp.ini. Разберем этот процесс по шагам:
nethasp.ini. Обычно он располагается в каталоге установки платформы (например, C:\Program Files\1cv8\conf\).[NH_TCPIP].
[NH_TCPIP]
NH_TCPIP = EE
NH_SERVER_ADDR = 192.168.1.100 ; Укажите здесь реальный IP-адрес вашего сервера лицензий
NH_USE_ALT_ADDR = EN
Это позволит платформе мгновенно обращаться к менеджеру лицензий напрямую по протоколу TCP/IP, минуя долгие таймауты сетевого опроса.
Если в ваших информационных базах настроена доменная авторизация (Windows-аутентификация), то при каждом входе пользователя сервер 1С обращается к контроллеру домена по протоколу LDAP для проверки учетных данных.
Если в ночное время ваш контроллер домена перезагружается для установки обновлений или занят собственным резервным копированием, сервер 1С зависает на этапе ожидания ответа от Active Directory. Записи в журнале регистрации 1С при этом не создаются, так как сессия еще не авторизована.
Рекомендация: Сопоставьте время зависания 1С с системными логами («Просмотр событий» -> «Система») на контроллерах домена. Убедитесь, что в периоды перезапуска и пиковой нагрузки 1С доменные службы остаются полностью доступными и сетевой пинг до них минимален.
Ночные зависания сервера 1С 8.3 — это комплексная проблема, которая чаще всего кроется на стыке прав операционной системы, некорректно настроенных скриптов автоматизации и аппаратных задержек ввода-вывода. Последовательно внедрив предложенные нами решения — разделив учетные записи планировщика и службы, оптимизировав ночные скрипты перезапуска с очисткой кэша сеансов snccntx и настроив прямую адресацию лицензий, вы обеспечите стабильную и бесперебойную работу вашей системы в режиме 24/7.