настройка php pm на сервере

Вопрос или проблема

Я не разработчик php и не знаю, как настроить сервер, но у меня есть такая проблема. В статистике RAM и процессора на моем сервере отображаются некоторые слайды (CPU https://disk.yandex.ru/i/BvtYfNCUGmAb1A и RAM https://disk.yandex.ru/i/WgSEYqJKU0gZFg). На сервере работают 4 приложения, 2 php и 2 js, и у него 8 ядер и 16 ГБ оперативной памяти.

В php-журналах есть такие строки:

WARNING: [pool web] кажется, занят (вам может потребоваться увеличить pm.start_servers или pm.min/max_spare_servers), порождая 8 дочерних процессов, 10 в бездействии и всего 31 дочерний процесс
WARNING: [pool web] кажется, занят (вам может потребоваться увеличить pm.start_servers или pm.min/max_spare_servers), порождая 32 дочерних процесса, 0 в бездействии и всего 53 дочерних процесса
WARNING: [pool web] сервер достиг настройки pm.max_children (64), рассмотрите возможность повышения

Иногда бывают такие:

NOTICE: Завершение ...
NOTICE: выходим, до свидания!
NOTICE: fpm работает, pid 4182079
NOTICE: готов к обработке соединений
NOTICE: интервал мониторинга systemd установлен на 10000ms
ps -ylC php-fpm --sort:rss
S   UID     PID    PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0    1623    1532  0  80   0 22332 20315 ep_pol ?        00:00:02 php-fpm
S    33  224785    1623  0  80   0 32404 24662 inet_c ?        00:00:03 php-fpm
S    33    2094    1623  0  80   0 33164 25185 inet_c ?        00:00:03 php-fpm
S    33    2093    1623  0  80   0 34428 25171 inet_c ?        00:00:04 php-fpm
free -hl
               total        used        free      shared  buff/cache   available
Mem:            15Gi       7.1Gi       2.2Gi        83Mi       6.5Gi       8.3Gi
Low:            15Gi        13Gi       2.2Gi
High:             0B          0B          0B
Swap:          4.0Gi       8.0Mi       4.0Gi

Текущие настройки pm

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Возможно, эту проблему можно решить, настроив pm max_children, start_servers, min_spare_servers, max_spare_servers, но я боюсь сделать это хуже.

Если я сделаю эти настройки:

pm.max_children = 6
pm.start_servers = количество ядер процессора х 4
pm.min_spare_servers = количество ядер процессора х 2
pm.max_spare_servers = количество ядер процессора х 4

Могу ли я все сломать?

Ответ или решение

Конфигурация PHP-FPM на сервере: пошаговое руководство

При конфигурации PHP-FPM (PHP FastCGI Process Manager) важно правильно настроить параметры управления процессами, чтобы обеспечить эффективность работы ваших приложений и оптимизацию использования ресурсов сервера. В вашем случае сервер имеет 8 ядер процессоров и 16 ГБ оперативной памяти, а также запускает 4 приложения (2 на PHP и 2 на JavaScript). Ниже мы рассмотрим, как правильно подойти к настройке.

Анализ текущей конфигурации

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

Ваши настройки:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

На данный момент pm.max_children установлен на 5, что явно недостаточно, поскольку в логах указано, что сервер достигает этого лимита и не может обрабатывать дополнительные запросы. Это ведет к замедлению работы приложений и потенциальным сбоям при высоких нагрузках.

Рекомендации по настройке

Для оптимизации параметров управления процессами вам потребуется изменить конфигурацию следующим образом:

  1. pm.max_children: это максимальное количество процессов, которые могут быть созданы. Рекомендуется установить это значение с учетом доступной оперативной памяти. Обычно, чтобы оценить количество процессов, можно использовать следующую формулу:

    [
    \text{pm.max_children} = \frac{\text{Общая память (ВБ)}}{\text{Память на один процесс (ВБ)}}
    ]

    Если один процесс PHP-FPM использует, например, 50 МБ, то:

    [
    \text{pm.max_children} = \frac{16 \times 1024}{50} \approx 327
    ]

    Однако стоит учесть, что сервер также используется и для других задач, поэтому начнем с более консервативного значения:

    pm.max_children = 30
  2. pm.start_servers: это количество процессов, которое будет создано при запуске. Для вашего сервера, учитывая 8 ядер, можно установить:

    pm.start_servers = 8
  3. pm.min_spare_servers и pm.max_spare_servers: эти параметры определяют минимальное и максимальное количество неактивных процессов, которые должны поддерживаться на случай внезапного увеличения нагрузки. Рекомендуемые значения:

    pm.min_spare_servers = 4
    pm.max_spare_servers = 16

Общая конфигурация

С учетом вышесказанного, рекомендованные параметры конфигурации PHP-FPM будут выглядеть следующим образом:

pm = dynamic
pm.max_children = 30
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 16

Тестирование

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

Заключение

Изменение параметров PHP-FPM может значительно улучшить производительность вашего сервера и уменьшить нагрузку на ресурсы. Однако всегда сохраняйте резервные копии текущих конфигураций и внимательно мониторьте результаты после внесения изменений. Если у вас возникнут сомнения или дополнительные вопросы, рекомендуется проконсультироваться с IT-специалистом для получения профессиональной помощи.

Оцените материал
Добавить комментарий

Капча загружается...