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

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

Публикация баз данных 1С:Предприятие на веб-сервере Apache — это популярное и эффективное решение для организации удаленной работы пользователей, особенно в небольших и средних компаниях. Однако системные администраторы часто сталкиваются со специфическими проблемами: утренними зависаниями системы, внезапными падениями веб-сервера и ошибками нехватки памяти («Out of Memory»).

В этой статье мы подробно разберем причины возникновения подобных сбоев на примере реального кейса, проанализируем системные логи Apache, рассмотрим тонкую настройку конфигурационных файлов и предложим комплексное решение для обеспечения стабильной работы связки 1С + 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

Проанализируем эти записи по шагам:

  1. В 09:24:49 родительский процесс Apache получает команду на остановку (сигнал AH00422). Это может происходить по разным причинам: запуск назначенного задания резервного копирования базы данных, ротация логов, действие антивируса или запуск утреннего скрипта обслуживания.
  2. Ровно через 30 секунд (в 09:25:19) родительский процесс принудительно завершает работу дочернего процесса (сигнал AH00431). Apache дает дочернему процессу ровно 30 секунд на корректное закрытие всех активных соединений, но тот не укладывается в этот лимит.
  3. Почему зависает дочерний процесс? В адресном пространстве процесса Apache крутится библиотека расширения 1С (например, wsap24.dll). Когда пользователи вечером уходят домой, не закрыв программу, их сессии остаются активными. При попытке остановить Apache модуль 1С пытается корректно завершить «зависшие» или «спящие» сеансы пользователей и освободить таблицы файловой базы данных. Происходит взаимная блокировка потоков, и процесс зависает.
  4. Принудительное убийство процесса (Forcing termination) приводит к тому, что файлы блокировок базы данных (*.1clck) остаются на диске в активном состоянии. Утром первый же зашедший пользователь пытается открыть базу, но натыкается на эти мертвые блокировки, из-за чего запуск 1С зависает намертво до тех пор, пока служба Apache не будет перезапущена вручную.

2. Тонкая настройка конфигурации Apache (httpd.conf) под Windows

Для предотвращения подобных ситуаций и повышения общей отказоустойчивости веб-сервера на операционных системах семейства 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

3. Настройка параметров публикации 1С (default.vrd)

Для борьбы с зависшими сессиями пользователей, которые блокируют корректное завершение работы веб-сервера, настроим параметры времени жизни сеансов непосредственно в файле публикации 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С.

4. Преодоление ограничений 32-битной архитектуры (x86)

В исходном обсуждении упоминается сервер под управлением Windows Server 2008 x86 с 4 ГБ оперативной памяти. Это критически слабая аппаратная конфигурация для одновременной работы СУБД, веб-сервера Apache и платформы 1С.

Выделим ключевые технологические ограничения 32-битных систем:

Единственно верное решение этой проблемы: переход на 64-битную операционную систему (Windows Server x64 или Windows 10/11 x64 для небольших офисов) и использование 64-битных версий платформы 1С и веб-сервера Apache. Это позволит процессам использовать весь объем физически установленной оперативной памяти без ограничений.

5. Создание скрипта для автоматического перезапуска службы

Если специфика бизнес-процессов требует гарантированного превентивного перезапуска веб-сервера перед началом рабочего дня (например, в 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 или Администратора).

6. Устранение проблемы с пропажей интерфейса у пользователей

После переноса базы данных на новый сервер пользователи иногда сталкиваются с ситуацией, когда под их учетными записями в 1С пропадают целые разделы меню (например, «Заказы клиентов» или «Документы продажи»), в то время как под учетной записью администратора все отображается корректно.

Выясним причины этой проблемы и способы ее устранения:

  1. Сброс функциональных опций. При переносе информационной базы в новый каталог или на другой сервер настройки констант и функциональных опций могут частично сброситься. Под учетной записью Администратора необходимо перейти в меню НСИ и администрирование -> Настройка разделов (например, Оптовые продажи) и проверить, активны ли флаги «Использовать заказы клиентов», «Заявки на возврат» и т.д.
  2. Ограничение прав по типу клиента. Веб-клиент накладывает определенные ограничения на отображение некоторых объектов метаданных. Откроем Конфигуратор 1С, перейдем в свойства роли пользователя и убедимся, что для используемых документов и справочников установлены права на просмотр и интерактивное открытие именно в режиме веб-клиента.
  3. Кэш веб-браузера. При обновлении платформы 1С на веб-сервере браузеры пользователей могут кэшировать старые стили и скрипты отображения интерфейса. Попросите пользователя нажать комбинацию клавиш Ctrl + F5 для полной очистки кэша страницы в браузере или запустите базу в режиме инкогнито для проверки.

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

← На главную