Краткий ответ: Запускайте PHP 8.3 с включённым OPcache, размерьте FPM-пул от вашей RAM (pm.max_children ≈ доступная RAM ÷ ~60–80 MB на воркер), поставьте memory_limit = 256M и поднимите лимиты загрузки до практичных значений (64M). Размер PHP-FPM — это разница между стабильным сайтом и 502-ми под нагрузкой.

Обзор

Каждый незакешированный запрос WordPress — это запрос PHP, поэтому конфигурация PHP прямо задаёт потолок вашей пропускной способности. Доминируют два рычага: OPcache (убирает стоимость перекомпиляции — почти бесплатная скорость) и менеджер процессов FPM (сколько запросов вы обслужите параллельно до появления очереди).

Что нужно иметь

  • Знание аппетита воркера: подгоните трафик и проверьте
    ps --no-headers -o rss -C php-fpm8.3 | awk '{sum+=$1; n++} END {print sum/n/1024 " MB avg"}'
  • Знание свободной RAM после MariaDB/Redis/веб-сервера: free -h.

Пошаговая инструкция

  1. Отредактируйте пул (/etc/php/8.3/fpm/pool.d/www.conf) — пример для ~2 GB свободной RAM и воркеров по ~70 MB:
    pm = dynamic
    pm.max_children = 25
    pm.start_servers = 5
    pm.min_spare_servers = 3
    pm.max_spare_servers = 8
    pm.max_requests = 500
  2. Подкрутите /etc/php/8.3/fpm/php.ini:
    memory_limit = 256M
    upload_max_filesize = 64M
    post_max_size = 64M
    max_execution_time = 120
  3. Проверьте OPcache и дайте ему пространство (php.ini, обычно уже включено):
    opcache.enable=1
    opcache.memory_consumption=192
    opcache.max_accelerated_files=20000
    opcache.validate_timestamps=1
  4. Примените и проверьте: sudo systemctl reload php8.3-fpm, затем следите за предупреждениями «server reached pm.max_children» в /var/log/php8.3-fpm.log — это сообщение означает, что пул маловат (или запросы слишком медленные).

Типичные проблемы

  • 502/504 под нагрузкой: пул исчерпан — поднимайте pm.max_children только если позволяет RAM, иначе удешевляйте запросы (кеширование) или добавляйте RAM.
  • max_children от RAM, которой нет: воркеры × аппетит должны умещаться в свободную RAM, иначе OOM killer первой убьёт MariaDB.
  • Путаница с memory_limit: это лимит на запрос, а не суммарный — 256M не значит, что каждый запрос ест 256 MB.

Когда обращаться в поддержку

Если оттюненный FPM + кеширование всё равно упираются в потолок — нагрузка переросла план: откройте тикет, чтобы обсудить апгрейд на больше vCPU/RAM (Power VPS для CPU-тяжёлых динамических сайтов).

Частые вопросы

Как посчитать pm.max_children для PHP-FPM?

Разделите RAM, которую можете отдать PHP, на средний аппетит одного воркера (для WordPress обычно 60–80 MB): 2 GB свободных / 70 MB — это примерно 25–28 воркеров, и оставьте запас для базы данных.

Действительно ли обновление версии PHP ускоряет WordPress?

Да — PHP 8.x в бенчмарках на WordPress заметно быстрее 7.4 и получает security-патчи; протестируйте плагины на staging, а затем обновляйтесь через PPA ondrej или свою панель.

Что делает pm.max_requests?

Он перезапускает каждый FPM-воркер после N запросов (например, 500), что маскирует медленные утечки памяти в плагинах и не даёт долгоживущим пулам распухать днями.

Похожие статьи

Готовы начать? Заказать WordPress VPS в Cloud2Y →

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)