Как оптимизировать PHP-FPM для Laravel: воркеры, память, процессы
Для ускорения Laravel нужно правильно задать количество воркеров, лимит памяти и параметры управления процессами в php‑fpm.conf — это повышает пропускную способность до 30 % и снижает расходы на серверы.
Оптимизировать PHP‑FPM для Laravel можно, задав правильное количество воркеров, лимит памяти и параметры процесса в конфигурации php‑fpm.conf — это повышает производительность, экономит ресурсы и позволяет обслуживать до 30 % больше запросов без дополнительных расходов.
Как определить оптимальное количество воркеров в PHP‑FPM для Laravel?
Оптимальное число воркеров рассчитывается исходя из количества CPU‑ядер и характера нагрузки; простая формула workers = (CPU cores × 2) + 1 дает хороший старт.
- Шаг 1. Узнайте количество ядер:
nprocв Linux возвращает, например, 8 ядер. - Шаг 2. Подставьте в формулу: (8 × 2) + 1 = 17 воркеров.
- Шаг 3. Откройте
/etc/php/8.2/fpm/pool.d/www.confи установитеpm.max_children = 17. - Шаг 4. Перезапустите сервис:
systemctl restart php8.2-fpm. - Шаг 5. Проверьте нагрузку через
htop— если процессор загружен > 80 % при 100 % запросов, уменьшитеpm.max_childrenна 10‑15 %.
Почему важен лимит памяти (memory_limit) и как его настроить?
Лимит памяти защищает от «утечек» и падения воркеров; правильный memory_limit гарантирует, что каждый процесс Laravel будет иметь достаточно RAM для обработки запросов без перерасхода.
- Рекомендация 2026 года: установить
memory_limit = 256Mдля типовых API‑приложений и512Mдля тяжёлых админ‑панелей. - Проверьте текущий расход:
ps -o rss,cmd -C php-fpm— средний RSS 180 MB, значит 256 M — безопасный запас. - Измените в
php.iniили в пулеwww.confпараметрphp_admin_value[memory_limit] = 256M. - Перезапустите FPM и наблюдайте за
slowlog— падения из‑за OOM исчезнут.
Что делать, если приложение Laravel падает из‑за переполнения очереди запросов?
Если запросы откладываются в очередь, первым делом проверьте pm.max_children и pm.max_requests — они отвечают за количество обслуживаемых запросов и перезапуск воркеров.
- Установите
pm.max_requests = 500— воркер будет перезапускаться после 500 запросов, очищая память. - Добавьте
request_terminate_timeout = 30sдля принудительного завершения «зависших» процессов. - Настройте очередь Laravel (Redis, Beanstalkd) с лимитом
retry_after = 90секунд, чтобы запросы не «залипали» в PHP‑FPM. - В случае постоянных падений увеличьте
pm.max_childrenна 20 % и проверьте нагрузку CPU.
Как настроить процессное управление (pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers) в PHP‑FPM?
Эти параметры задают динамику создания и уничтожения воркеров; правильные значения позволяют быстро реагировать на всплески трафика.
- pm = dynamic — режим, когда FPM сам регулирует количество процессов.
pm.max_children— максимум воркеров, рассчитывается как в формуле выше.pm.start_servers— стартовое количество, обычно ceil(pm.max_children / 3). Для 17 воркеров: 6.pm.min_spare_servers— минимум свободных воркеров, обычно 2‑3.pm.max_spare_servers— максимум свободных, обычно 5‑7.- Пример конфигурации:
pm = dynamic pm.max_children = 17 pm.start_servers = 6 pm.min_spare_servers = 3 pm.max_spare_servers = 7 pm.max_requests = 500
Какие дополнительные параметры ускоряют Laravel в 2026 году?
Современные версии PHP 8.2 и Laravel 10 поддерживают ускорители, которые стоит включать вместе с настройкой FPM.
- Включите OPcache:
opcache.enable=1,opcache.memory_consumption=256,opcache.max_accelerated_files=20000. - Настройте realpath_cache_size до
4096k— ускоряет разрешение путей в Laravel. - Для API‑приложений установите
fastcgi.logging = 0— уменьшает логирование на уровне FastCGI. - Используйте HTTP/2 на Nginx, комбинируя с
keepalive_timeout 65иkeepalive_requests 1000. - Экономьте: при правильных настройках можно сократить расходы на облачный сервер до 1 500 руб. в месяц вместо 3 200 руб.
Воспользуйтесь бесплатным инструментом PHP‑FPM Tuner на toolbox-online.ru — работает онлайн, без регистрации.
Теги