Как решить проблему с зависанием пользователей в файловой базе 1С на веб-сервере Apache?

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

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

В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы взаимодействия 1С и веб-сервера, а также рассмотрим комплекс практических шагов для полной стабилизации работы системы.

1. Архитектурные ограничения файлового режима и блокировки

Для начала проанализируем первопричину зависаний на уровне СУБД файлового варианта. В отличие от клиент-серверного режима, где за управление транзакциями и блокировками отвечает полноценная СУБД (MS SQL, PostgreSQL и др.), в файловом варианте все данные хранятся в одном файле 1Cv8.1CD.

Когда пользователь работает через веб-сервер, модуль расширения wsap24.dll транслирует HTTP-запросы в обращения к файлу базы данных. Особенность работы заключается в следующем:

2. Увеличение размера стека потока Apache в Windows

По умолчанию в операционной системе Windows веб-сервер Apache выделяет на каждый рабочий поток стек размером всего в 1 МБ (в то время как в Linux этот показатель равен 8 МБ). При выполнении сложных запросов 1С, рекурсивной обработке кода конфигурации или сериализации больших объемов данных в форматы XML/JSON этого объема критически не хватает.

В результате происходит переполнение стека (Stack Overflow). Поток аварийно завершается, рабочий процесс веб-сервера httpd.exe падает (в системном журнале фиксируется ошибка APP_CRASH с кодом 0xc0000005 в модуле wsap24.dll). Для пользователей это выглядит как моментальное «отваливание» или зависание сессии.

Рассмотрим, как решить эту проблему путем увеличения размера стека:

  1. Откроем конфигурационный файл веб-сервера Apache httpd.conf (обычно находится в папке C:\Program Files\Apache24\conf\).
  2. Перейдем в самый конец файла и добавим следующую директиву:

<IfModule mpm_winnt_module>
    ThreadStackSize 8388608
</IfModule>

Этот параметр принудительно устанавливает размер стека в 8 МБ для каждого потока в среде Windows, что предотвратит падения модуля wsap24.dll из-за нехватки памяти под стек выполнения.

3. Настройка автоматического перезапуска рабочих процессов Apache

В процессе длительной работы веб-сервера с файловой базой в оперативной памяти могут накапливаться утечки ресурсов, вызванные некорректно завершенными сеансами связи. Чтобы избежать ручного перезапуска службы Apache, настроим автоматическую утилизацию (recycling) рабочих процессов.

Разберем по шагам, как ограничить «время жизни» процесса по количеству обработанных запросов:

  1. В файле httpd.conf найдем директиву подключения модуля мультипроцессной обработки (MPM). Для Windows это модуль mpm_winnt_module.
  2. Найдем параметр MaxConnectionsPerChild (в старых версиях Apache он может называться MaxRequestsPerChild).
  3. По умолчанию этот параметр равен 0, что означает бесконечную жизнь процесса. Установим лимит, например, в 3000 или 5000 запросов:

MaxConnectionsPerChild 3000

Как только процесс обработает 3000 запросов, Apache автоматически и незаметно для пользователей перезапустит рабочий дочерний процесс, очистив оперативную память и сбросив «зависшие» дескрипторы файлов.

4. Влияние регламентных и фоновых заданий в файловом режиме

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

Когда запускается регламентное задание (например, обновление полнотекстового поиска, извлечение текста или загрузка курсов валют), оно перехватывает поток веб-сервера и блокирует файл базы данных 1Cv8.1CD для обычных пользователей. Это гарантированно приводит к зависаниям.

Для решения этой проблемы выполним следующие действия:

  1. Зайдем в информационную базу под правами администратора и откроем форму «Регламентные и фоновые задания». Полностью отключим все неиспользуемые и некритичные регламентные задания.
  2. Выделим для выполнения регламентных заданий отдельный постоянный сеанс. Для этого на сервере запустим обычный тонкий или толстый клиент 1С:Предприятия под специально созданной учетной записью (например, РоботРоботович) и оставим этот сеанс запущенным круглосуточно. В этом случае регламентные задания будут выполняться локально в его потоке, минуя веб-сервер Apache.

5. Оптимизация времени жизни неактивных сессий

Если пользователь некорректно закрыл вкладку браузера или у него временно оборвалось сетевое соединение (например, при работе через Wi-Fi или мобильный интернет), сессия в файловой базе продолжает удерживать лицензию и блокировки таблиц.

Мы можем сократить время ожидания системы перед принудительным завершением таких «брошенных» сессий. Настройка производится в файле публикации базы default.vrd, который находится в каталоге публикации (например, C:\inetpub\wwwroot\MyBase\ или аналогичной папке Apache):

  1. Откроем файл default.vrd любым текстовым редактором.
  2. Внутри тега <point> найдем секцию настроек веб-сервисов <ws> и установим параметр sessionTimeout. Зададим значение, равное 600 секундам (10 минут):

<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/MyBase"
       ib="File="C:\Bases\MyBase";">
    <ws>
        <sessionTimeout>600</sessionTimeout>
    </ws>
</point>

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

6. Обновление платформы 1С и разрядности веб-сервера

Практический опыт показывает, что стабильность работы модуля wsap24.dll напрямую зависит от версии платформы 1С:Предприятие. Фирма 1С постоянно совершенствует механизмы блокировок и взаимодействия с веб-окружением.

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.27.2130/bin/wsap24.dll"

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

Применение этого комплекса мер — от расширения стека потоков до оптимизации регламентных заданий и таймаутов — позволит полностью исключить зависания пользователей файловой базы при работе через веб-сервер Apache.

← На главную