Почему файловая база 1С на Apache вылетает при увеличении числа пользователей?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

Работа файловой базы 1С через веб-сервер Apache — это популярное решение для небольших рабочих групп. Однако при достижении определенного порога нагрузки (обычно от 5 до 10 активных пользователей) система начинает вести себя нестабильно. Рассмотрим ситуацию, когда при выполнении запросов к ресурсу /e1cib/dlist происходят массовые зависания тонких клиентов, а в журнале событий Windows фиксируется ошибка приложения httpd.exe со сбойным модулем KERNELBASE.dll.

Разберем по шагам причины такого поведения и проанализируем методы стабилизации системы.

Анализ технической ошибки и кода исключения

Первым делом проанализируем данные из журнала событий. Код исключения 0xe06d7363, зафиксированный в логах, является внутренним кодом исключения Microsoft Visual C++. В контексте работы 1С и Apache это чаще всего означает, что расширение 1С (модуль wsap22.dll или wsap24.dll) столкнулось с ситуацией, которую не смогло обработать штатно.

Особое внимание уделим ресурсу /e1cib/dlist. Этот путь отвечает за работу динамических списков. Когда пользователь открывает журнал документов или справочник, система отправляет POST-запрос для получения порции данных. Если база файловая, то веб-сервер Apache должен единолично управлять доступом к файлу 1Cv8.1CD. При росте числа пользователей до 9 и более, количество одновременных обращений к файлу базы данных возрастает экспоненциально, что приводит к блокировкам и превышению лимитов памяти процесса.

Проверка целостности файловой базы

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

Воспользуемся утилитой chdbfl.exe, которая находится в каталоге bin установленной платформы 1С. Выполним следующие действия:

  1. Создадим резервную копию файла 1Cv8.1CD.
  2. Запустим chdbfl.exe.
  3. Укажем путь к файлу базы.
  4. Установим флаг "Исправлять обнаруженные ошибки" и нажмем "Выполнить".

Если утилита найдет ошибки, это может быть первопричиной "неспецифицированной ошибки" при попытке прочитать данные из поврежденных таблиц динамического списка.

Решение проблемы 32-битного ограничения памяти

Проанализируем ситуацию с оперативной памятью. В исходном сообщении указано, что на сервере 16 Гб ОЗУ, но занята лишь половина. Однако важно понимать: если установлен 32-битный Apache (как в версии 2.2.25 из лога), он физически не может адресовать более 2-4 Гб памяти.

Когда 9 пользователей одновременно открывают тяжелые отчеты или списки в 1С:Бухгалтерии 3.0 (которая сама по себе весьма требовательна к ресурсам), процесс httpd.exe быстро упирается в лимит адресного пространства. Как только память заканчивается, происходит "крэш" модуля KERNELBASE.dll.

Решение: Переход на 64-битную архитектуру веб-сервера. Разберем алгоритм перехода:

  1. Удалим старую версию Apache 2.2 (32-bit).
  2. Установим современную версию Apache 2.4 (64-bit).
  3. Убедимся, что на сервере установлена 64-битная платформа 1С:Предприятие.
  4. При публикации базы через конфигуратор или утилиту webinst выберем модуль расширения веб-сервера именно из 64-битного каталога 1С.

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

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

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

Рассмотрим параметры модуля mpm_winnt_module. По умолчанию Apache может создавать слишком много потоков, которые начинают конкурировать за доступ к единственному файлу .1CD, создавая огромные очереди.

Попробуем ограничить количество потоков и добавить принудительный перезапуск процессов для очистки памяти. Найдем и отредактируем секцию в httpd.conf:


<IfModule mpm_winnt_module>
    ThreadsPerChild      35
    MaxRequestsPerChild   2000
</IfModule>

Разберем эти значения: ThreadsPerChild 35 — мы ограничиваем количество одновременно обрабатываемых запросов. Для 9-15 пользователей этого достаточно. Меньшее количество потоков снижает вероятность взаимных блокировок в файловом режиме. MaxRequestsPerChild 2000 — после обработки 2000 запросов рабочий процесс Apache будет автоматически перезапущен. Это помогает бороться с утечками памяти, которые могут возникать в модулях расширения 1С.

Настройка окружения и исключений

Проанализируем внешние факторы. Файловая база 1С крайне чувствительна к скорости работы дисковой подсистемы и блокировкам файлов.

Антивирусная проверка: Необходимо добавить в исключения антивируса (проверка в реальном времени):

Права доступа: Проверим, от чьего имени запущена служба Apache. Обычно это SYSTEM или LocalService. Убедимся, что у этой учетной записи есть полные права (Full Control) на папку с базой данных и на папку с установленной платформой 1С. Недостаток прав на создание временных файлов часто приводит к ошибке "Неспецифицированная ошибка работы с ресурсом".

Архитектурный предел файлового режима

В завершение стоит отметить, что 9-10 пользователей для "1С:Бухгалтерии 3.0" в файловом режиме — это пограничное состояние. Данная конфигурация построена на управляемых формах и содержит сложную бизнес-логику, которая при каждом действии пользователя инициирует множество обращений к БД.

Если вышеуказанные меры (переход на 64-бит и настройка Apache) принесут лишь временное облегчение, проанализируем возможность перехода на клиент-серверный вариант (SQL). Даже бесплатная версия PostgreSQL в связке с сервером 1С полностью снимет проблему блокировок на уровне файлов и позволит системе стабильно работать с гораздо большим количеством пользователей на том же железе (16 Гб ОЗУ вполне достаточно для небольшого сервера SQL и сервера приложений 1С).

← На главную