При организации удаленной работы пользователей с файловой базой данных 1С через веб-сервер Apache системные администраторы часто сталкиваются с неприятной проблемой. Время от времени сессии пользователей «зависают», новые подключения становятся невозможными, а в системных журналах операционной системы регистрируются ошибки, связанные с модулем расширения веб-сервера wsap24.dll. Обычное завершение сеансов в консоли не помогает, и единственным временным спасением становится перезапуск службы Apache.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы взаимодействия 1С и веб-сервера, а также рассмотрим комплекс практических шагов для полной стабилизации работы системы.
Для начала проанализируем первопричину зависаний на уровне СУБД файлового варианта. В отличие от клиент-серверного режима, где за управление транзакциями и блокировками отвечает полноценная СУБД (MS SQL, PostgreSQL и др.), в файловом варианте все данные хранятся в одном файле 1Cv8.1CD.
Когда пользователь работает через веб-сервер, модуль расширения wsap24.dll транслирует HTTP-запросы в обращения к файлу базы данных. Особенность работы заключается в следующем:
1Cv8.1CD.По умолчанию в операционной системе Windows веб-сервер Apache выделяет на каждый рабочий поток стек размером всего в 1 МБ (в то время как в Linux этот показатель равен 8 МБ). При выполнении сложных запросов 1С, рекурсивной обработке кода конфигурации или сериализации больших объемов данных в форматы XML/JSON этого объема критически не хватает.
В результате происходит переполнение стека (Stack Overflow). Поток аварийно завершается, рабочий процесс веб-сервера httpd.exe падает (в системном журнале фиксируется ошибка APP_CRASH с кодом 0xc0000005 в модуле wsap24.dll). Для пользователей это выглядит как моментальное «отваливание» или зависание сессии.
Рассмотрим, как решить эту проблему путем увеличения размера стека:
httpd.conf (обычно находится в папке C:\Program Files\Apache24\conf\).
<IfModule mpm_winnt_module>
ThreadStackSize 8388608
</IfModule>
Этот параметр принудительно устанавливает размер стека в 8 МБ для каждого потока в среде Windows, что предотвратит падения модуля wsap24.dll из-за нехватки памяти под стек выполнения.
В процессе длительной работы веб-сервера с файловой базой в оперативной памяти могут накапливаться утечки ресурсов, вызванные некорректно завершенными сеансами связи. Чтобы избежать ручного перезапуска службы Apache, настроим автоматическую утилизацию (recycling) рабочих процессов.
Разберем по шагам, как ограничить «время жизни» процесса по количеству обработанных запросов:
httpd.conf найдем директиву подключения модуля мультипроцессной обработки (MPM). Для Windows это модуль mpm_winnt_module.MaxConnectionsPerChild (в старых версиях Apache он может называться MaxRequestsPerChild).0, что означает бесконечную жизнь процесса. Установим лимит, например, в 3000 или 5000 запросов:
MaxConnectionsPerChild 3000
Как только процесс обработает 3000 запросов, Apache автоматически и незаметно для пользователей перезапустит рабочий дочерний процесс, очистив оперативную память и сбросив «зависшие» дескрипторы файлов.
В файловой базе данных отсутствует полноценный сервер приложений, который мог бы взять на себя диспетчеризацию фоновых задач. По умолчанию регламентные задания запускаются непосредственно в контексте активных пользовательских сеансов, работающих через веб-сервер.
Когда запускается регламентное задание (например, обновление полнотекстового поиска, извлечение текста или загрузка курсов валют), оно перехватывает поток веб-сервера и блокирует файл базы данных 1Cv8.1CD для обычных пользователей. Это гарантированно приводит к зависаниям.
Для решения этой проблемы выполним следующие действия:
РоботРоботович) и оставим этот сеанс запущенным круглосуточно. В этом случае регламентные задания будут выполняться локально в его потоке, минуя веб-сервер Apache.Если пользователь некорректно закрыл вкладку браузера или у него временно оборвалось сетевое соединение (например, при работе через Wi-Fi или мобильный интернет), сессия в файловой базе продолжает удерживать лицензию и блокировки таблиц.
Мы можем сократить время ожидания системы перед принудительным завершением таких «брошенных» сессий. Настройка производится в файле публикации базы default.vrd, который находится в каталоге публикации (например, C:\inetpub\wwwroot\MyBase\ или аналогичной папке Apache):
default.vrd любым текстовым редактором.<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 минут, освобождая дескрипторы файлов и снижая нагрузку на базу.
Практический опыт показывает, что стабильность работы модуля wsap24.dll напрямую зависит от версии платформы 1С:Предприятие. Фирма 1С постоянно совершенствует механизмы блокировок и взаимодействия с веб-окружением.
httpd.exe при работе с большими объемами данных.wsap24.dll в конфигурационном файле Apache httpd.conf. Строка подключения выглядит примерно так:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.27.2130/bin/wsap24.dll"
После внесения изменений в конфигурационные файлы не забудьте перезапустить службу Apache, чтобы новые параметры вступили в силу.
Применение этого комплекса мер — от расширения стека потоков до оптимизации регламентных заданий и таймаутов — позволит полностью исключить зависания пользователей файловой базы при работе через веб-сервер Apache.