Работа файловой базы 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С. Выполним следующие действия:
1Cv8.1CD.chdbfl.exe.Если утилита найдет ошибки, это может быть первопричиной "неспецифицированной ошибки" при попытке прочитать данные из поврежденных таблиц динамического списка.
Проанализируем ситуацию с оперативной памятью. В исходном сообщении указано, что на сервере 16 Гб ОЗУ, но занята лишь половина. Однако важно понимать: если установлен 32-битный Apache (как в версии 2.2.25 из лога), он физически не может адресовать более 2-4 Гб памяти.
Когда 9 пользователей одновременно открывают тяжелые отчеты или списки в 1С:Бухгалтерии 3.0 (которая сама по себе весьма требовательна к ресурсам), процесс httpd.exe быстро упирается в лимит адресного пространства. Как только память заканчивается, происходит "крэш" модуля KERNELBASE.dll.
Решение: Переход на 64-битную архитектуру веб-сервера. Разберем алгоритм перехода:
webinst выберем модуль расширения веб-сервера именно из 64-битного каталога 1С.Это позволит процессу Apache использовать всю доступную оперативную память сервера, что снимет проблему вылетов из-за нехватки адресного пространства.
Выясним причину, по которой 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С крайне чувствительна к скорости работы дисковой подсистемы и блокировкам файлов.
Антивирусная проверка: Необходимо добавить в исключения антивируса (проверка в реальном времени):
*.1CD.httpd.exe.Права доступа: Проверим, от чьего имени запущена служба Apache. Обычно это SYSTEM или LocalService. Убедимся, что у этой учетной записи есть полные права (Full Control) на папку с базой данных и на папку с установленной платформой 1С. Недостаток прав на создание временных файлов часто приводит к ошибке "Неспецифицированная ошибка работы с ресурсом".
В завершение стоит отметить, что 9-10 пользователей для "1С:Бухгалтерии 3.0" в файловом режиме — это пограничное состояние. Данная конфигурация построена на управляемых формах и содержит сложную бизнес-логику, которая при каждом действии пользователя инициирует множество обращений к БД.
Если вышеуказанные меры (переход на 64-бит и настройка Apache) принесут лишь временное облегчение, проанализируем возможность перехода на клиент-серверный вариант (SQL). Даже бесплатная версия PostgreSQL в связке с сервером 1С полностью снимет проблему блокировок на уровне файлов и позволит системе стабильно работать с гораздо большим количеством пользователей на том же железе (16 Гб ОЗУ вполне достаточно для небольшого сервера SQL и сервера приложений 1С).