Почему зависают тонкие клиенты 1С при работе через Apache и как это исправить?

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

Работа тонких клиентов 1С через веб-сервер Apache — это стандартная практика для территориально распределенных компаний. Однако часто системные администраторы сталкиваются с проблемой «залипания» или полных зависаний сессий. Пользователи жалуются на то, что программа перестает отвечать, а помогает только перезапуск службы Apache. В этой статье мы подробно разберем, почему это происходит и как настроить сервер для стабильной работы.

Проанализируем работу модуля mpm_winnt

Веб-сервер Apache на операционных системах семейства Windows работает иначе, чем в Linux. Он использует модуль mpm_winnt, который создает один управляющий процесс и один рабочий процесс, внутри которого запускается множество потоков. По умолчанию настройки Apache часто не рассчитаны на интенсивную нагрузку, которую создает 1С.

Разберем основные параметры в файле httpd.conf (или в подключаемом файле extra/httpd-mpm.conf), которые нам необходимо изменить:

  1. ThreadsPerChild: Этот параметр определяет количество одновременно работающих потоков. Если у вас 50 пользователей, каждый из которых может инициировать несколько соединений, стандартного значения в 64 или 150 потоков будет недостаточно. Установим значение в диапазоне 1000–1500, чтобы создать запас для очередей.
  2. MaxRequestsPerChild: По умолчанию здесь может стоять 0 (бесконечно). Однако для предотвращения постепенных утечек памяти, которые возможны при работе расширений 1С, рекомендуется установить конечное число, например, 3000. Это заставит рабочий процесс Apache периодически перезапускаться, очищая память.

Пример настройки блока в конфигурационном файле:


<IfModule mpm_winnt_module>
    ThreadsPerChild      1000
    MaxRequestsPerChild   3000
</IfModule>

Отключение AcceptFilter для стабилизации соединений

Одной из самых коварных причин зависаний на Windows Server является механизм AcceptEx. Это оптимизация передачи сокетов от операционной системы к веб-серверу. К сожалению, она часто конфликтует с антивирусами, брандмауэрами и драйверами сетевых карт, что приводит к тому, что запрос «зависает» на сетевом уровне, так и не дойдя до 1С.

Выясним, как это отключить. Нам нужно добавить в самый конец файла httpd.conf следующие строки:


AcceptFilter http none
AcceptFilter https none

После внесения этих изменений обязательно перезапустим службу Apache. Это отключит специфические оптимизации Windows, которые в 90% случаев являются причиной необъяснимых «фризов» тонкого клиента.

Оптимизация сетевого стека Windows (TCP Chimney Offload)

Современные версии Windows Server (2008 R2, 2012, 2016, 2019) по умолчанию пытаются переложить часть работы по обработке сетевых пакетов на процессор сетевой карты. Это называется «разгрузкой TCP». При работе с длинными HTTP-запросами 1С это часто вызывает микро-разрывы соединений.

Рассмотрим команды, которые необходимо выполнить в командной строке (CMD) от имени администратора для стабилизации сетевого стека:


netsh int tcp set global chimney=disabled
netsh int tcp set global rss=disabled
netsh int tcp set global netdma=disabled

Эти действия отключают аппаратную обработку TCP-пакетов, заставляя операционную систему брать эту задачу на себя. Это повышает стабильность передачи данных между тонким клиентом и сервером Apache.

Настройка публикации 1С и файла default.vrd

При публикации информационной базы 1С создается файл default.vrd. В нем содержатся критически важные параметры пула соединений. Если размер пула слишком мал, новые запросы от пользователей будут ждать очереди, что визуально выглядит как зависание программы.

Найдем и отредактируем параметры в блоке <pool>:

Пример корректной настройки в default.vrd:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" 
       base="/BaseName" 
       ib="Srvr=Server1C;Ref=BaseName;">
    <pool size="100" timeout="20"/>
</point>

Проанализируем влияние IPv6 и Keep-Alive

Иногда задержки возникают из-за того, что Apache пытается сначала разрешить адрес через протокол IPv6, а только после тайм-аута переходит на IPv4. Рекомендуется явно указать Apache слушать только конкретный IPv4-адрес вашего сервера.

В файле httpd.conf найдем строку Listen 80 и заменим её на:

Listen 192.168.1.10:80

(где 192.168.1.10 — IP вашего сервера).

Также обратим внимание на параметр KeepAlive. Этот механизм позволяет держать соединение открытым для нескольких запросов. В условиях нестабильного интернета (как у удаленных офисов) слишком долгий KeepAliveTimeout может привести к «забиванию» потоков Apache мертвыми сессиями. Попробуем установить его в значение 2–3 секунды или вовсе отключить для теста:

KeepAlive Off

Использование IIS как альтернативы

Если после всех настроек Apache продолжает вести себя нестабильно на Windows Server, стоит рассмотреть переход на Internet Information Services (IIS). Поскольку IIS является «родным» компонентом Windows, он зачастую работает стабильнее и лучше управляет ресурсами памяти и сетевыми сокетами именно в этой ОС. Платформа 1С официально поддерживает работу с IIS, и процесс публикации базы там практически не отличается от Apache.

Выясним причины через лог-файлы

Если проблема сохраняется, нам необходимо заглянуть в error.log веб-сервера Apache. Ищем следующие маркеры:

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

← На главную