Что такое FPM?php-105

Что такое PHP-FPM?

PHP-FPM — это альтернативная реализация PHP FastCGI с дополнительными возможностями для высоконагруженных сайтов. Главная задача — эффективно обрабатывать PHP-запросы в веб-среде.

# Пример команды для запуска PHP-FPM
php-fpm -y /etc/php/8.2/fpm/php-fpm.conf -F -O

Ключевые особенности

  1. Архитектура "master-worker"

    • Главный процесс (master) управляет рабочими (worker)
    • Каждый worker обрабатывает отдельный запрос
  2. Преимущества перед mod_php:

    • Лучшая изоляция процессов
    • Более экономное использование памяти
    • Гибкая настройка пулов процессов
  3. Основные компоненты:

    • Пул процессов (static, dynamic, ondemand)
    • Менеджер процессов (регулирует количество workers)
    • FastCGI-сервер (принимает соединения от веб-сервера)

Конфигурация

[global]
pid = /run/php/php8.2-fpm.pid
error_log = /var/log/php8.2-fpm.log

[www]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

Режимы работы пула процессов

Режим Описание Использование
static Фиксированное число процессов Стабильная нагрузка
dynamic Автомасштабирование Переменная нагрузка
ondemand Создание при запросе Очень низкая нагрузка

Интеграция с веб-серверами

Nginx конфигурация:

location ``` \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Apache конфигурация:

<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>

Оптимизация производительности

  1. Настройки пула процессов:

    • pm.max_children = (Available RAM) / (Memory per PHP process)
    • pm.max_requests для предотвращения утечек памяти
  2. Статус и мониторинг:

location /status {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Резюмируем:

PHP-FPM — это мощный менеджер процессов PHP, обеспечивающий высокую производительность, стабильность и гибкость конфигурации. Он стал стандартом де-факто для современных PHP-приложений, особенно в сочетании с Nginx. Правильная настройка FPM критически важна для оптимальной работы высоконагруженных проектов.