Сервер с 8 ГБ RAM и 4-ядерным CPU под нагрузкой 50 одновременных пользователей тормозит до 5 секунд ответа. top — 95% CPU на php-fpm, swap забит. Дефолтная конфигурация PHP-FPM подходит для визиток, но не для Битрикса с его тяжёлой ORM и объектными кэшами. При такой нагрузке время генерации страницы может превышать 10 секунд, что катастрофически сказывается на пользовательском опыте.
Мы настраиваем PHP-FPM под Битрикс уже много лет — более 50 проектов за плечами. За это время выработали конфигурации, которые выдерживают 200+ одновременных пользователей на одном сервере. В этой статье — конкретные параметры и расчёты для типового проекта.
Почему дефолтный PHP-FPM не подходит для Битрикс?
Дефолтный пул обычно pm = dynamic с pm.max_children = 5. Для магазина на Битрикс с 50 пользователями этого мало — 5 воркеров блокируются медленными запросами, остальные ждут в очереди. Результат: Timeout 504. Оптимизированная конфигурация даёт прирост скорости в 2-3 раза по сравнению со стандартной.
Как рассчитать количество воркеров?
Формула: max_children = (Доступная RAM для PHP) / (Средний размер процесса). При 8 ГБ RAM, 2 ГБ под OS, 1 ГБ под MySQL: 5 ГБ / 120 МБ = ~41. Берём с запасом на рост — 30–35.
| RAM сервера | OS + MySQL | Доступно PHP | Размер процесса | max_children |
|---|---|---|---|---|
| 8 ГБ | 3 ГБ | 5 ГБ | 120 МБ | 30-35 |
| 16 ГБ | 4 ГБ | 12 ГБ | 120 МБ | 80-100 |
| 32 ГБ | 8 ГБ | 24 ГБ | 120 МБ | 160-200 |
Диагностика текущего состояния
Перед настройкой — снимок реальной картины:
# Количество php-fpm процессов и их статус ps aux | grep php-fpm | grep -v grep | wc -l # Потребление памяти на один процесс ps aux --sort=-%mem | grep php-fpm | head -5 | awk '{print $6/1024 " MB"}' # Статус пула через status-страницу curl -s http://127.0.0.1/php-fpm-status?full Типичная картина: 20–30 PHP-FPM воркеров по 80–150 МБ каждый. 30 * 120 МБ = 3.6 ГБ только на PHP при 8 ГБ RAM.
Настройка пула
Конфигурационный файл пула /etc/php/8.1/fpm/pool.d/bitrix.conf:
[bitrix] user = bitrix group = bitrix listen = /run/php/php8.1-fpm-bitrix.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 ; Управление процессами pm = dynamic pm.max_children = 30 pm.start_servers = 8 pm.min_spare_servers = 5 pm.max_spare_servers = 15 pm.max_requests = 1000 ; Таймауты request_terminate_timeout = 120s request_slowlog_timeout = 5s slowlog = /var/log/php-fpm/slow.log ; Статус pm.status_path = /php-fpm-status Режимы управления процессами: dynamic подходит для переменной нагрузки — экономит память при простое, но тратит ресурсы на fork. static минимально задерживает запросы при стабильной нагрузке, но не адаптируется к спаду. ondemand экономит максимум при редких пиках, но вызывает задержки при старте. Для большинства Битрикс-проектов выбираем dynamic.
pm.max_requests = 1000 — перезапуск воркера после 1000 запросов предотвращает утечки памяти. Характерно для проектов с большим количеством сторонних PHP-модулей.
Как мы настраиваем PHP-FPM пошагово
- Аудит текущего состояния сервера с помощью команд
ps,curlстатуса пула. - Расчёт
pm.max_childrenна основе свободной памяти. - Создание отдельных пулов для сайта, агентов и импорта 1С.
- Настройка
php.iniс JIT, Memcached для сессий, OPcache. - Конфигурация slowlog и мониторинга.
- Тестирование под нагрузкой.
Настройка PHP для Битрикс
/etc/php/8.1/fpm/php.ini (критичные для Битрикс параметры):
; Память memory_limit = 256M ; Время выполнения max_execution_time = 90 max_input_time = 60 ; Загрузка файлов (для загрузки изображений и прайсов) upload_max_filesize = 256M post_max_size = 256M max_file_uploads = 50 ; Сессии session.gc_maxlifetime = 3600 session.save_handler = memcached session.save_path = "127.0.0.1:11211" ; OPcache opcache.enable = 1 opcache.memory_consumption = 256 opcache.max_accelerated_files = 20000 opcache.validate_timestamps = 1 opcache.revalidate_freq = 60 opcache.jit = tracing opcache.jit_buffer_size = 64M ; Отключаем опасные функции disable_functions = exec,passthru,shell_exec,system,proc_open,popen session.save_handler = memcached — сессии в памяти вместо файловой системы. Критично при нескольких серверах (кластер) и ускоряет доступ к сессиям в 10–20 раз.
opcache.jit = tracing — JIT-компилятор PHP 8.0+. Для Битрикс с его процедурным кодом даёт 10–30% прирост CPU.
Сравнение параметров PHP по умолчанию и оптимизированных:
| Параметр | Значение по умолчанию | Оптимизированное | Влияние |
|---|---|---|---|
memory_limit |
128M | 256M | Увеличение для тяжёлых страниц |
upload_max_filesize |
2M | 256M | Загрузка больших прайсов |
session.save_handler |
files | memcached | Ускорение сессий в 10-20x |
opcache.memory_consumption |
128 | 256 | Кэширование большего кода |
Почему нужно разделять пулы для агентов и импорта 1С?
Рекомендуется разделять пулы:
-
bitrix.conf— основной сайт, 30 воркеров, 256M memory -
agents.conf— агенты Битрикс, 3–5 воркеров, 512M memory, longer timeout -
import.conf— импорт 1С, 1–2 воркера, 1G memory, 300s timeout
Агенты и импорт 1С не должны конкурировать с пользовательскими запросами за воркеры. Без разделения пул для импорта может занять все 30 слотов на время обработки прайса.
Мониторинг
# Смотрим статус в реальном времени watch -n1 'curl -s http://127.0.0.1/php-fpm-status | grep -E "active|idle|total"' Если active processes стабильно равен max_children — пул переполнен, запросы ставятся в очередь. Нужно либо увеличить max_children, либо оптимизировать код.
Типичные ошибки при настройке PHP-FPM
- Слишком маленький pm.max_children. Если max_children меньше количества параллельных запросов, запросы становятся в очередь. Решение — расчёт по формуле выше.
- Отсутствие slowlog. Без slowlog вы не узнаете, какие запросы тормозят. Включаем request_slowlog_timeout = 5s.
- Общий пул для всех задач. Импорт 1С и агенты должны иметь отдельные пулы, иначе пользовательские запросы блокируются.
Что входит в настройку под ключ
Мы предлагаем комплексную услугу по оптимизации PHP-FPM для 1С-Битрикс. В неё входит:
- Аудит текущей конфигурации сервера и PHP
- Расчёт оптимального количества воркеров и размера пулов
- Настройка отдельных пулов для агентов и импорта
- Оптимизация OPcache и JIT
- Перенос сессий на Memcached или Redis
- Настройка slowlog и мониторинга
- Документация по конфигурации
- Гарантия стабильной работы под нагрузкой
Свяжитесь с нами для бесплатного аудита вашей конфигурации PHP-FPM. Закажите настройку под ключ и получите экономию на серверных ресурсах от $100–300 в месяц. Экономия на серверных ресурсах после настройки может достигать 40%, что при аренде сервера за $270–390 в месяц составляет $110–160 экономии.
Читайте также Wikipedia: PHP-FPM и Официальная документация 1С-Битрикс по PHP для углублённого изучения.







