В процессе эксплуатации серверов 1С:Предприятие системные администраторы часто сталкиваются со ситуацией, когда информационная база неожидаемо «зависает» без выдачи сообщений об ошибках пользователям. Работать в базе становится невозможно, сеансы перестают откликаться, а нормальное функционирование восстанавливается только после перезапуска службы кластера 1С (ragent). Рассмотрим подробнее причины такого поведения и разберем по шагам комплект мер по диагностике и устранению этой проблемы.
Проанализируем типичную инфраструктуру: сервер приложений 1С работает под управлением 32-разрядной платформы 1С:Предприятие 8.3, СУБД развернута на MS SQL Server 2016, а средой виртуализации выступает Hyper-V. В таких условиях зависания чаще всего вызываются следующими факторами:
rphost.exe в 32-разрядной версии имеет жесткое ограничение виртуальной памяти (около 2–3 ГБ). При приближении к этому порогу процесс зависает при попытке выделить новый блок памяти.WSAENOTSOCK (код 10038 — попытка выполнить операцию на объекте, не являющемся сокетом), связанное с некорректной работой сетевых карт виртуализации Hyper-V или некорректным разрывом соединений.Для определения точной причины сбоя настроим сбор данных технологического журнала. Создадим файл log.cfg в каталоге конфигурации сервера 1С (обычно C:\Program Files (x86)\1cv8\conf) со следующим содержимым:
<config xmlns="http://v8.1c.ru/8.2/virtual-resource-system">
<log location="C:\LOGS\1C" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="PROC"/>
</event>
<property name="all"/>
</log>
</config>
В моменты зависания проанализируем созданные логи. Если в файлах журнала фиксируются записи типа HeartbeatThreadImpl.cpp с текстом descr=10038(0x00002736): Сделана попытка выполнить операцию на объекте, не являющемся сокетом, это говорит о разрыве фоновых соединений между службой сервера и клиентами.
Если временно нет возможности перевести кластер 1С на 64-разрядную платформу, необходимо настроить автоматический контроль ресурсов рабочего процесса в консоли администрирования кластера 1С:
1600000 КБ, что соответствует ~1.5 ГБ).86400 секунд (24 часа) или укажем допустимое количество соединений на один рабочий процесс (например, 10–15 сеансов).Благодаря этим настройкам кластер 1С будет автоматически создавать новый процесс rphost.exe и плавно переносить сеансы до того, как текущий процесс исчерпает память и зависнет.
Выясним причину возможного повреждения метаданных. При систематическом применении динамического обновления кеш на сервере может содержать устаревшие или поврежденные скомпилированные модули. Для полного исправления проблемы выполним следующие шаги:
1C:Enterprise 8.3 Server Agent (ragent).%PROGRAMDATA%\1C\1cv8\srvinfo\reg_1541).ragent..cf), после чего сделаем полный запуск обновления базы без применения динамического режима.Посмотрим на настройки базы данных в MS SQL Server. Чтобы избежать зависаний при расширении файлов базы, настроим фиксированный шаг приращения и мгновенную инициализацию файлов:
Autogrowth (Автоувеличение): вместо процентного приращения по умолчанию (10%) установим фиксированный размер (например, 512 MB или 1024 MB) для файла данных и файла журнала транзакций.Max Degree of Parallelism (MAXDOP) равным 1 (или от 2 до 4 в зависимости от количества ядер), чтобы предотвратить взаимные блокировки паралельных потоков выполнения запросов.При наличии ошибки сокетов 10038 в технологическом журнале причиной зависания часто выступает виртуальный сетевой адаптер Hyper-V. Для предотвращения сброса TCP-соединений отключим функции аппаратной разгрузки на сетевом адаптере виртуальной машины:
IPv4 Checksum OffloadLarge Send Offload v2 (IPv4) / LSOVirtual Machine Queue / VMQОписанный комплекс мер позволяет полностью ликвидировать причины внезапного зависания информационной базы 1С 8.3 и обеспечить стабильную работу пользователей без необходимости регулярного перезапуска служб.