Многие системные администраторы и специалисты по поддержке сталкиваются с ситуацией, когда клиентское приложение 1С перестает отвечать на действия пользователя. Особенно неприятно, когда это происходит в виртуализированной среде при работе через удаленный рабочий стол (RDP).
Проблема часто носит "плавающий" характер: зависания происходят в случайные моменты времени, на разных формах и отчетах, и, что самое сложное для диагностики, не оставляют следов в Журнале регистрации.
В этой статье мы подробно разберем причины такого поведения, проанализируем настройки среды виртуализации и самой платформы 1С, а также рассмотрим пошаговые методы устранения этих зависаний.
Рассмотрим типичный сценарий: имеется сервер 1С и SQL на одной виртуальной машине, и терминальный сервер (RDP) для пользователей на другой. Обе машины физически находятся на одном сервере. Используется современная версия платформы (например, ветка 8.3.23). Пользователи работают в режиме ТонкийКлиент.
Основные симптомы:
Давайте разберем комплекс мер, которые помогут локализовать и устранить эту проблему, двигаясь от настроек платформы к системным настройкам сети и виртуализации.
Начиная с версий платформы 8.3.23, изменились механизмы отрисовки интерфейса. В виртуальных средах и RDP-сессиях 1С часто конфликтует с драйверами видеокарты или их эмуляцией при рендеринге сложных форм.
Мы рекомендуем принудительно отключить аппаратное ускорение для клиента 1С. Это выполняется через конфигурационный файл conf.cfg.
Порядок действий:
C:\Program Files\1cv8\8.3.xx.xxxx\bin\conf).conf.cfg.
DisableHWAcceleration=1
В некоторых случаях также помогает явное указание режима отрисовки через параметр GraphicsMode. Это заставляет платформу использовать более простые механизмы GDI вместо DirectX/OpenGL, которые могут некорректно работать в виртуальной среде.
Современные версии Windows Server по умолчанию используют протокол UDP для RDP-сессий. Это сделано для улучшения плавности воспроизведения видео и звука. Однако 1С:Предприятие крайне чувствительно к даже минимальным потерям пакетов, которые допустимы в UDP, но критичны для транзакционной целостности интерфейса.
Если канал связи работает по UDP, "микро-разрывы" могут не фиксироваться командой ping, но приводить к тому, что клиент 1С перестает получать ответы от сервера отрисовки и зависает.
Мы рекомендуем перевести RDP принудительно на TCP:
gpupdate /force или перезагрузите сервер.В обсуждениях часто упоминается разница в поведении между тонким и толстым клиентом. ТонкийКлиент оптимизирован для передачи минимального объема данных, но он может быть менее устойчив к кратковременным потерям связи в специфических условиях виртуализации. ТолстыйКлиент держит соединение более "жестко".
Для диагностики попробуйте перевести проблемных пользователей на толстый клиент (если конфигурация это позволяет, например, в режиме управляемого приложения). Если зависания прекратятся или сменятся явными ошибками сети, это подтвердит гипотезу о проблемах на сетевом уровне.
Поскольку сервер 1С и клиентская часть находятся на виртуальных машинах в рамках одного физического хоста, проблема часто кроется в работе виртуальных сетевых адаптеров (например, VMXNET3 или VirtIO). Технологии разгрузки сети (Offloading), призванные снизить нагрузку на CPU, могут некорректно обрабатывать пакеты 1С.
Давайте отключим эти функции на уровне гостевых ОС (и на сервере 1С, и на терминальном сервере):
IPv4 Checksum OffloadTCP Checksum Offload (IPv4 и IPv6)Large Send Offload (LSO)Это переложит задачу обработки пакетов на центральный процессор, что исключит ошибки драйвера виртуализации.
Неочевидная, но распространенная причина зависаний при открытии форм документов или таблиц — это опрос подсистемы печати. Если в RDP-сессию пробрасываются локальные принтеры пользователя через технологию Easy Print, 1С может зависнуть, пытаясь получить их статус.
Диагностика:
Не стоит исключать и ошибки самой платформы. Версия 8.3.23.2137, упомянутая в исходной проблеме, известна рядом проблем с утечками памяти в процессе rphost и нестабильной работой в терминале. Если процесс завис на сервере, для оперативного вмешательства можно использовать WEB приложение для управления сеансами "1С сервера", которое позволяет завершать процессы rphost без полного доступа к консоли сервера.
Мы рекомендуем рассмотреть переход на:
Если ни одно из вышеперечисленных решений не помогло, нам необходимо понять, что происходит "под капотом" в момент зависания. Стандартный журнал регистрации здесь бессилен, так как он фиксирует только свершившиеся события.
Настроим сбор технологического журнала. Нам потребуется отслеживать события SCALL (серверный вызов) и CALL (клиентский вызов) с фильтром по длительности. Это позволит увидеть, на каком именно запросе система "встала".
Пример конфигурационного файла logcfg.xml для поиска длительных операций:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\logs\1c" history="24">
<event>
<eq property="name" value="SCALL"/>
<gt property="duration" value="100000"/> <!-- 10 секунд -->
</event>
<event>
<eq property="name" value="CALL"/>
<gt property="duration" value="100000"/>
</event>
<property name="all"/>
</log>
</config>
Анализ логов покажет: либо запрос уходит на сервер и там зависает (проблема SQL, блокировок, кода), либо запрос даже не формируется (проблема клиента, графики, ОС). Чтобы быстро интерпретировать полученные данные, рекомендуем использовать внешний отчет на СКД "Ошибки технологического журнала", который поможет визуализировать проблемы без ручного разбора XML.
Для построения системы постоянного мониторинга можно настроить экспорт технологического журнала 1С в Elastic с помощью Logstash. При настройке парсинга обратите внимание на структуру событий: часто для корректной обработки требуется предварительная обработка, где мы убираем лишние переносы строк в тексте события.
Проблема "тихого" зависания клиента 1С в RDP почти всегда решается комплексно. Чаще всего виновником является комбинация нового механизма рендеринга платформы (решается через conf.cfg) и сетевых настроек протокола RDP (переключение на TCP). Последовательно применяя описанные выше методики, вы сможете обеспечить стабильную работу пользователей.