Как решить проблему зависания процессов 1cv8.exe на RDP-сервере и устранить сопутствующие сбои?

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

Администрирование терминальных серверов (RDP), на которых пользователи активно работают в решениях 1С, часто преподносит неприятные сюрпризы. Одна из самых распространенных и болезненных проблем — зависание процессов 1cv8.exe в диспетчере задач после того, как пользователь закрыл программу. Внешне приложение закрывается, но его процесс продолжает висеть в системе, потребляя оперативную память и до 12–15% ресурсов центрального процессора на каждый экземпляр. Когда таких "фантомных" процессов накапливается десяток-другой, сервер начинает катастрофически терять производительность, что приводит к жалобам пользователей на общую медлительность системы.

В рамках этой статьи мы подробно разберем, почему процессы 1С не завершаются корректно, рассмотрим влияние подсистемы печати Windows, проанализируем проблемы с драйверами торгового оборудования (в частности, АТОЛ) и настроим сервер так, чтобы навсегда избавиться от ручного "убийства" процессов каждое утро.

---

Почему процессы 1cv8.exe остаются активными в RDP-сессиях?

Когда пользователь нажимает на "крестик" или выбирает пункт меню "Файл — Выход", платформа 1С запускает стандартный механизм завершения работы. При этом должны последовательно закрыться все активные соединения, выгрузиться внешние компоненты, очиститься временные файлы кэша и завершиться все связанные потоки операционной системы. Если хотя бы один из этих этапов блокируется внешней службой или драйвером, процесс 1cv8.exe переходит в состояние ожидания и зависает.

Выделим основные причины, почему это происходит:

  1. Блокировка подсистемой печати Windows (процесс splwow64.exe). При печати документов из 32-разрядной версии 1С на 64-битной операционной системе Windows Server запускается специальный транслятор печати. Он удерживает дескрипторы процесса 1С, не позволяя операционной системе закрыть его до истечения собственного таймаута.
  2. Некорректная выгрузка внешних компонент (драйверов торгового оборудования). Если в сессии используются драйверы торгового оборудования (сканеры штрихкодов, ККТ, терминалы сбора данных), они могут вызывать так называемую COM-блокировку. Процесс ожидает ответа от порта устройства, связь с которым могла быть потеряна.
  3. Зависание сессий RemoteApp. При публикации 1С как удаленного приложения (RemoteApp) сессия пользователя на сервере не закроется до тех пор, пока активен хотя бы один дочерний процесс. Зависший процесс 1С удерживает всю RDP-сессию в состоянии "Отключена", расходуя лицензии и ресурсы.
  4. Агрессивное поведение антивирусного ПО. При выходе 1С пытается очистить временный кэш в профиле пользователя. Если антивирус в этот момент блокирует файлы для проверки, процесс закрытия зависает.
  5. Проблемы с энергосбережением на клиентах. Переход сетевых адаптеров локальных компьютеров в спящий режим обрывает сетевую сессию некорректно, из-за чего сервер считает сеанс активным и "держит" процесс.

---

Решение 1: Оптимизация работы подсистемы печати через реестр

Если пользователи отправляют документы на печать, операционная система задействует службу трансляции splwow64.exe. По умолчанию в Windows Server этот процесс ожидает новых заданий печати в течение 180 секунд (3 минут) после завершения последнего документа. Все это время он удерживает связь с процессом 1С, блокируя его закрытие. Если пользователь закроет 1С в этот интервал времени, процесс 1cv8.exe останется висеть в памяти.

Выполним тонкую настройку реестра на сервере терминалов, чтобы сократить время ожидания и разрешить принудительное завершение транслятора:

  1. Откроем редактор реестра (нажмем комбинацию клавиш Win + R, введем regedit и нажмем Enter).
  2. Перейдем по пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print.
  3. Создадим новый параметр типа DWORD (32 бита) с именем SplWOW64TimeOut и присвоим ему десятичное значение 1 (это сократит время ожидания до 1 минуты).
  4. Перейдем по пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs.
  5. Создадим параметр типа DWORD (32 бита) с именем splwow64.exe и присвоим ему значение 0. Данная настройка указывает серверу терминалов, что этот процесс можно принудительно закрывать при завершении сеанса пользователя.

После внесения изменений перезапустим службу "Диспетчер печати" (Spooler) или перезагрузим сервер в нерабочее время.

---

Решение 2: Настройка таймаутов завершения сессий в групповых политиках

Для того чтобы зависшие процессы и "спящие" сессии пользователей не накапливались сутками, настроим автоматическое завершение отключенных сеансов. Это особенно актуально при работе через RemoteApp.

Выполним настройку через локальные групповые политики сервера:

  1. Откроем редактор групповых политик (команда gpedit.msc в окне "Выполнить").
  2. Перейдем в раздел: Конфигурация компьютера — Административные шаблоны — Компоненты Windows — Службы удаленных рабочих столов — Узел сеансов удаленных рабочих столов — Ограничение сеансов по времени.
  3. Найдем параметр "Задать предел времени для отключенных сеансов". Переведем его в состояние "Включено" и установим временной лимит (например, 5 или 10 минут). Если пользователь закроет окно 1С "крестиком" и сессия перейдет в статус "Disconnected", сервер автоматически закроет все процессы этой сессии через указанное время.
  4. Параметр "Завершать сеанс при достижении предела времени" также переведем в состояние "Включено".

---

Решение 3: Проблема драйверов оборудования АТОЛ и медленной работы сканеров

Часто виновниками зависания процессов 1С при выходе становятся внешние компоненты торгового оборудования. Они не могут корректно завершить работу с COM-портами. Обновление драйверов (например, "Драйвера устройств ввода" от АТОЛ) решает проблему зависания, но может привести к другой проблеме — сканеры штрихкодов начинают считывать коды крайне медленно (с задержкой в несколько секунд).

Выясним причину этого поведения. Современные версии драйверов АТОЛ (начиная с 9-й и 10-й версий) являются платными. Если на сервере не установлена лицензия, драйвер автоматически переходит в демонстрационный режим. В демо-режиме разработчиком намеренно заложена искусственная задержка (от 5 до 15 секунд) при передаче каждого считанного штрихкода в 1С. Это делает работу сотрудников невыносимой.

Рассмотрим два варианта решения этой проблемы:

Вариант А. Переход на бесплатный NativeAPI-драйвер от 1С (Рекомендуемый)

Современные конфигурации 1С на управляемых формах прекрасно работают со сканерами штрихкодов без стороннего платного софта от АТОЛ. Для этого выполним следующие действия:

  1. Переведем физический сканер штрихкодов в режим эмуляции COM-порта (USB-COM). Обычно для этого нужно считать специальный управляющий штрихкод из инструкции к сканеру.
  2. В базе 1С перейдем в раздел Администрирование — Подключаемое оборудование.
  3. Создадим новое устройство с типом "Сканеры штрихкода".
  4. В качестве драйвера выберем стандартный бесплатный драйвер "1С:Сканеры штрихкода (NativeAPI)".
  5. Настроим параметры подключения (укажем виртуальный COM-порт, созданный сканером в системе, и скорость передачи данных).

Этот способ полностью решает проблему зависаний процессов при закрытии 1С и исключает любые задержки при сканировании, так как библиотека NativeAPI работает напрямую с портами операционной системы и корректно освобождает ресурсы.

Вариант Б. Использование старых бесплатных версий драйвера АТОЛ

Если ваша конфигурация 1С или специфика работы требуют использования именно драйверов АТОЛ, можно установить старую сертифицированную бесплатную версию (например, версию 6.5.3 или другие релизы 2008–2009 годов), где ограничения по скорости и лицензированию отсутствовали.

При установке современного общего пакета драйверов торгового оборудования АТОЛ (ДТО) обязательно выберите выборочный тип установки и снимите флажок с пункта "Драйвер устройств ввода", чтобы новые платные библиотеки не заменяли старую стабильную версию.

---

Решение 4: Отключение энергосбережения сетевых адаптеров

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

  1. На рабочей станции пользователя зайдем в "Диспетчер устройств".
  2. Найдем сетевой адаптер (Ethernet или Wi-Fi), откроем его свойства и перейдем на вкладку "Управление электропитанием".
  3. Снимем флажок с пункта "Разрешить отключение этого устройства для экономии энергии".
  4. В дополнительных настройках схемы электропитания Windows установим запрет на переход компьютера в спящий режим при бездействии.

---

Решение 5: Настройка исключений антивируса для папок кэша 1С

При закрытии платформы 1cv8.exe активно удаляет временные файлы из каталогов кэша. Если антивирус на сервере блокирует доступ к этим файлам для сканирования, процесс зависает. Добавим папки 1С в исключения антивирусного ПО на сервере:

Также рекомендуется добавить в исключения исполняемые файлы 1cv8.exe, 1cv8c.exe и 1cv8s.exe.

---

Как локализовать проблемный поток с помощью Process Explorer?

Если процессы продолжают зависать, а точную причину установить не удается, проведем диагностику с помощью утилиты от Microsoft — Process Explorer. Выполним следующие шаги для локализации проблемы:

  1. Скачаем и запустим утилиту Process Explorer на сервере от имени администратора.
  2. Найдем зависший процесс 1cv8.exe, который потребляет ресурсы процессора.
  3. Нажмем по нему правой кнопкой мыши и выберем пункт Properties (Свойства).
  4. Перейдем на вкладку Threads (Потоки).
  5. В списке потоков отсортируем их по колонке CPU, чтобы увидеть, какой именно поток утилизирует процессор.
  6. Посмотрим на стек вызовов этого потока (кнопка Stack). В нем будет указана конкретная библиотека (файл с расширением .dll), которая вызвала блокировку. Если имя библиотеки указывает на драйвер печати или компоненту торгового оборудования (например, файлы драйвера АТОЛ или ККТ), мы сразу поймем, в какую сторону направлять усилия по устранению сбоя.

Применяя данные методы в комплексе, мы сможем добиться стабильной работы RDP-сервера, полностью исключить ручной мониторинг диспетчера задач и обеспечить быструю работу торгового оборудования без задержек.

← На главную