При публикации файловых баз 1С через веб-сервер Apache на операционных системах семейства Windows пользователи часто сталкиваются с аномальным поведением процесса httpd.exe. Со временем нагрузка на центральный процессор (CPU) начинает расти, достигая критических значений (40–99%), что приводит к «зависанию» сервера и невозможности комфортной работы. Особенно остро эта проблема проявляется на серверном оборудовании с низкой тактовой частотой ядер, например, на процессорах серии Xeon E5-2603.
В этой статье мы подробно разберем причины возникновения такой нагрузки и проанализируем комплекс мер по оптимизации веб-сервера для стабильной работы с 1С.
Одной из наиболее распространенных причин деградации производительности являются микро-утечки памяти в библиотеках сопряжения 1С (таких как wsap22.dll или wsap24.dll). С каждым обработанным запросом процесс Apache может резервировать небольшой объем памяти, который не возвращается операционной системе. Когда объем занятой памяти становится критическим, система начинает активно использовать файл подкачки, что резко увеличивает нагрузку на процессор из-за ожидания ввода-вывода и обработки очередей.
Решение: Ограничение времени жизни рабочих процессов
Для борьбы с этим явлением мы можем заставить Apache принудительно перезапускать дочерние потоки после обработки определенного количества запросов. Это позволяет «сбрасывать» накопленные ошибки без полной остановки веб-сервера. Разберем, как это настроить в файле httpd.conf:
mpm_winnt_module.MaxRequestsPerChild. По умолчанию он часто равен 0 (бесконечность).Пример настройки:
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxRequestsPerChild 2000
</IfModule>
После достижения 2000 запросов процесс будет корректно завершен и запущен заново, что очистит оперативную память.
Apache изначально разрабатывался для Unix-систем, и его работа на Windows имеет свои особенности. Существует известный конфликт механизмов оптимизации передачи сокетов с драйверами сетевых карт и антивирусным ПО, что приводит к зацикливанию потоков и росту CPU.
Решение: Отключение AcceptFilter
Проанализируем ситуацию: на Windows Server 2012 и выше Apache пытается использовать специфические системные вызовы для ускорения обработки HTTP-запросов. Если эти вызовы работают некорректно, процесс «съедает» процессорное время. Для исправления ситуации добавим в конец httpd.conf следующие строки:
AcceptFilter http none
AcceptFilter https none
EnableSendfile off
EnableMMAP off
Эти директивы отключают использование фильтров приема и механизмов Memory-Mapping, что делает работу сервера более стабильной в среде Windows.
Выясним причину нагрузки, связанную с самой архитектурой 1С. В файловом режиме все регламентные и фоновые задания (индексация поиска, обновление агрегатов, слияние индексов) выполняются в контексте того процесса, который открыл базу. Если база опубликована через веб-сервер, эти тяжелые задачи ложатся «на плечи» httpd.exe.
Решение: Управление фоновыми заданиями
Для стабилизации работы веб-сервера рекомендуется:
default.vrd) можно попробовать ограничить количество одновременно выполняемых фоновых заданий.Рассмотрим пример из практики: использование версии Apache 2.2.13 на современной ОС Windows Server 2012. Данная версия является морально устаревшей и не содержит исправлений для работы с новыми сетевыми стеками Microsoft.
Рекомендации по обновлению:
Если оптимизация Apache не приносит желаемого результата, проанализируем альтернативный вариант — переход на Microsoft IIS (Internet Information Services). Поскольку IIS является нативным компонентом Windows, он более эффективно управляет пулами приложений и системными ресурсами.
Преимущества IIS для 1С:
Чтобы не гадать, какой именно запрос вызывает рост нагрузки, мы можем включить модуль мониторинга. Это позволит нам в реальном времени видеть, какие IP-адреса и к каким базам обращаются в момент пика CPU.
Разберем шаги по включению мониторинга:
httpd.conf раскомментируйте строку: LoadModule status_module modules/mod_status.so.
<Location "/server-status">
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
Теперь, перейдя по адресу http://localhost/server-status, мы увидим детальную таблицу активных потоков.
Часто причиной «зависания» httpd.exe становится антивирусное ПО, которое пытается заблокировать и проверить временные файлы 1С, создаваемые веб-сервером в папке temp.
Что нужно сделать:
httpd.exe в список исключений (доверенных процессов) антивируса.*.1CD, *.1CL).Если найти точную причину утечки не удается, в качестве временной меры можно настроить автоматический перезапуск службы веб-сервера в часы наименьшей активности (например, ночью).
Посмотрим на пример простого скрипта PowerShell, который можно добавить в планировщик задач:
$serviceName = "Apache2.2"
Restart-Service -Name $serviceName -Force
Write-Output "Служба Apache была успешно перезапущена $(Get-Date)"
Важно: Перед выполнением принудительного перезапуска следует убедиться, что все пользователи завершили сеансы, так как это приведет к обрыву их соединений с базой данных.