Публикация баз данных 1С:Предприятие на веб-сервере Apache — это популярное и эффективное решение для организации удаленной работы пользователей, особенно в небольших и средних компаниях. Однако системные администраторы часто сталкиваются со специфическими проблемами: утренними зависаниями системы, внезапными падениями веб-сервера и ошибками нехватки памяти («Out of Memory»).
В этой статье мы подробно разберем причины возникновения подобных сбоев на примере реального кейса, проанализируем системные логи Apache, рассмотрим тонкую настройку конфигурационных файлов и предложим комплексное решение для обеспечения стабильной работы связки 1С + Apache.
Рассмотрим классическую ситуацию: каждое утро первый заходящий в базу менеджер сталкивается с бесконечным зависанием 1С на этапе запуска. Проблема временно решается только ручной перезагрузкой службы веб-сервера. Давайте заглянем в лог ошибок Apache (error.log), чтобы понять физику процесса:
[Thu Jan 31 09:24:49.037306 2019] [mpm_winnt:notice] [pid 5444:tid 660] AH00422: Parent: Received shutdown signal -- Shutting down the server.
[Thu Jan 31 09:25:19.053124 2019] [mpm_winnt:notice] [pid 5444:tid 660] AH00431: Parent: Forcing termination of child process 2160
[Thu Jan 31 09:25:25.146913 2019] [mpm_winnt:notice] [pid 5232:tid 660] AH00455: Apache/2.4.4 (Win32) configured -- resuming normal operations
Проанализируем эти записи по шагам:
AH00422). Это может происходить по разным причинам: запуск назначенного задания резервного копирования базы данных, ротация логов, действие антивируса или запуск утреннего скрипта обслуживания.AH00431). Apache дает дочернему процессу ровно 30 секунд на корректное закрытие всех активных соединений, но тот не укладывается в этот лимит.wsap24.dll). Когда пользователи вечером уходят домой, не закрыв программу, их сессии остаются активными. При попытке остановить Apache модуль 1С пытается корректно завершить «зависшие» или «спящие» сеансы пользователей и освободить таблицы файловой базы данных. Происходит взаимная блокировка потоков, и процесс зависает.Forcing termination) приводит к тому, что файлы блокировок базы данных (*.1clck) остаются на диске в активном состоянии. Утром первый же зашедший пользователь пытается открыть базу, но натыкается на эти мертвые блокировки, из-за чего запуск 1С зависает намертво до тех пор, пока служба Apache не будет перезапущена вручную.Для предотвращения подобных ситуаций и повышения общей отказоустойчивости веб-сервера на операционных системах семейства Windows необходимо внести изменения в файл конфигурации httpd.conf. По умолчанию Apache сконфигурирован под усредненные веб-ресурсы, а не под тяжелые бизнес-приложения, такие как 1С. Для автоматизированного развертывания веб-сервера подойдёт PowerShell-скрипт установки Apache HTTP Server на Windows.
Откроем текстовым редактором файл C:\Apache24\conf\httpd.conf и настроим модуль управления процессами mpm_winnt:
Шаг 1. Ограничение жизненного цикла рабочих процессов
По умолчанию параметр MaxConnectionsPerChild равен 0 (бесконечно). Это приводит к постепенному накоплению утечек памяти в процессе веб-сервера. Установим лимит соединений, после достижения которого дочерний процесс будет автоматически и незаметно для пользователей перезапущен:
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxConnectionsPerChild 2000
</IfModule>
Шаг 2. Отключение фильтрации сокетов Windows (AcceptFilter)
Использование встроенного в Windows механизма AcceptEx часто вызывает скрытые зависания сетевых потоков Apache при работе с платформой 1С. Добавим в самый конец конфигурационного файла следующие директивы для отключения этой оптимизации:
AcceptFilter http none
AcceptFilter https none
Шаг 3. Увеличение размера стека потоков
Для выполнения сложных XML/JSON-запросов, построения тяжелых отчетов и обработки данных в 1С стандартного размера стека потока Apache в Windows может не хватать, что вызывает падение процесса. Зададим фиксированный увеличенный размер стека потока:
<IfModule mpm_winnt_module>
ThreadStackSize 8888888
</IfModule>
После изменения настроек обязательно перезапустим службу веб-сервера через консоль или командную строку администратора:
httpd.exe -k restart
Для борьбы с зависшими сессиями пользователей, которые блокируют корректное завершение работы веб-сервера, настроим параметры времени жизни сеансов непосредственно в файле публикации 1С. Этот файл называется default.vrd и находится в каталоге, куда была опубликована база данных (например, C:\inetpub\wwwroot\Trade\default.vrd).
Откроем файл default.vrd в режиме редактирования XML и настроим параметры sessionMaxAge (время жизни неактивной сессии в секундах) и пулы соединений:
<?xml version="1.0" encoding="UTF-8"?>
<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="/Trade"
ib="File="C:\1C_Bases\Trade";">
<!-- Настройка времени жизни неактивной сессии (20 минут) -->
<ws enable="true" point="common" sessionMaxAge="1200"/>
<httpServices publishByDefault="true" />
<!-- Ограничение пула соединений -->
<connectionPool size="10" timeout="60" />
</point>
Благодаря параметру sessionMaxAge="1200", если менеджер оставил программу открытой и ушел домой, веб-сервер автоматически закроет его неактивное соединение через 20 минут. Ночью база данных гарантированно освободится от спящих сеансов, файлы блокировок будут удалены, а плановый бэкап или перезапуск сервера пройдет в штатном режиме. Для удобного управления параметрами веб-публикаций можно использовать приложение для администрирования публикаций 1С.
В исходном обсуждении упоминается сервер под управлением Windows Server 2008 x86 с 4 ГБ оперативной памяти. Это критически слабая аппаратная конфигурация для одновременной работы СУБД, веб-сервера Apache и платформы 1С.
Выделим ключевые технологические ограничения 32-битных систем:
httpd.exe, внутри которого выполняется библиотека 1С) физически не может адресовать более 2 ГБ оперативной памяти (в редких случаях до 3 ГБ с ключом запуска /3GB).RAM disk на x86 системах для обхода лимита памяти не решает проблему нехватки адресного пространства для конкретного процесса 1С/Apache, а лишь ускоряет дисковые операции.Единственно верное решение этой проблемы: переход на 64-битную операционную систему (Windows Server x64 или Windows 10/11 x64 для небольших офисов) и использование 64-битных версий платформы 1С и веб-сервера Apache. Это позволит процессам использовать весь объем физически установленной оперативной памяти без ограничений.
Если специфика бизнес-процессов требует гарантированного превентивного перезапуска веб-сервера перед началом рабочего дня (например, в 07:00 утра), мы можем автоматизировать этот процесс с помощью планировщика задач Windows и простого командного файла.
Создадим файл restart_apache.bat со следующим содержимым:
@echo off
set SERVICE_NAME=Apache2.4
echo Stopping %SERVICE_NAME%...
net stop %SERVICE_NAME% /y
rem Ожидание 10 секунд для корректного освобождения портов и файлов блокировок 1С
timeout /t 10 /nobreak
echo Cleaning temporary lock files...
del /f /q "C:\1C_Bases\Trade\*.1clck" 2>nul
echo Starting %SERVICE_NAME%...
net start %SERVICE_NAME%
echo Apache successfully restarted at %date% %time% >> C:\Apache24\logs\restart_service.log
Затем настроим запуск этого батника в Планировщике задач Windows (Task Scheduler) ежедневно в 07:00 утра с наивысшими правами (от имени учетной записи SYSTEM или Администратора).
После переноса базы данных на новый сервер пользователи иногда сталкиваются с ситуацией, когда под их учетными записями в 1С пропадают целые разделы меню (например, «Заказы клиентов» или «Документы продажи»), в то время как под учетной записью администратора все отображается корректно.
Выясним причины этой проблемы и способы ее устранения:
Ctrl + F5 для полной очистки кэша страницы в браузере или запустите базу в режиме инкогнито для проверки.Применяя данные рекомендации по настройке конфигурационных файлов, оптимизации системных ресурсов и администрированию прав, мы сможем построить надежную, быструю и отказоустойчивую инфраструктуру для работы пользователей в 1С через веб-сервер Apache.