Настройка PHP-FPM для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка PHP-FPM для 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка PHP-FPM для 1С-Битрикс

Настройка PHP-FPM для 1С-Битрикс

Сервер с 8 ГБ RAM и 4-ядерным CPU под нагрузкой 50 одновременных пользователей начинает отвечать за 3–5 секунд. top показывает 95% CPU на php-fpm процессах и swap. Дефолтная конфигурация PHP-FPM рассчитана на минимальное потребление памяти, а не на highload. Для Битрикс — с его тяжёлыми объектными моделями и ORM — это неприемлемо.

Диагностика текущего состояния

Перед настройкой — снимок реальной картины:

# Количество 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

Расчёт pm.max_children:

max_children = (Доступная RAM для PHP) / (Средний размер процесса)

При 8 ГБ RAM, 2 ГБ под OS, 1 ГБ под MySQL: 5 ГБ / 120 МБ = ~41. Берём с запасом на рост — 30–35.

pm = dynamic vs pm = static: dynamic экономит память при низкой нагрузке. static предпочтительнее при стабильно высокой нагрузке — нет накладных расходов на fork новых процессов.

pm.max_requests = 1000: перезапуск воркера после 1000 запросов предотвращает утечки памяти. Характерно для проектов с большим количеством сторонних PHP-модулей.

Настройка 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.

Отдельные пулы для разных задач

Рекомендуется разделять пулы:

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, либо оптимизировать код.