Задать вопрос
Driver86
@Driver86
Немодератор toster.ru

Каким образом PHP-FPM-менеджер распределяет запросы между своими процессами?

Интересует pm = static.
Вроде как методом Round Robin, но могу ошибаться. Т.е. если даны процесс1, процесс2, процесс3, то запросы будут поступать по порядку по кругу.
Но что происходит, если задан pm.max_requests = 1000 и процесс получает 1000ый запрос? Менеджер перезапускает процесс после окончания обработки запроса, до начала обработки или до начала обработки 1001 запроса? Что происходит, если приходит новый запрос во время перезагрузки, менеджер его ждёт, или передаёт запрос другому процессу?
Довольно важные моменты. Т.к. если перезагрузка как-то влияет на обработку поступившего запроса, т.е. заставляет его ждать, это не есть хорошо.
  • Вопрос задан
  • 70 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    Язык программирования PHP
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 2
moderatorh
@moderatorh
В IT с 1987-го года.
В теорию глубоко не вникал, но механизм там примерно такой, по крайней мере в связке с веб сервером, например с Nginx.
В конфиге настраиваются как минимум три важных параметра.
1. Число постоянно работающих процессов (тредов) php-fpm
2. Максимальное число одновременно работающих процессов
3. Таймаут обработки запроса.
Каждый следующий запрос передается сервером свободному процессу с минимальным айди (не по кругу).
Если запущенного процесса нет и не достигнут лимит максимального числа процессов, то запускается новый процесс и ему передается пришедшийй запрос.
После окончания работы, процесс освобождается и какое то время остается "дежурить" в системе, оно тоже настраивается. Если не пришел новый запрос за это время, процесс умирает
Если все процессы заняты, то запрос не обрабатывается. Пользователь получает ошибку (код ответа HTTP)) 50x в зависимости от настроек. А Вы получаете в эррор лог ошибку о переполнении пула.
Кстати плохая ошибка, наличие которой лучше отслеживать...

Вышеперечисленные параметры действительно очень сильно влияют на производительность системы. Но вполне достаточно просто правильно рассчитать и задать эти параметры и все! Лезть глубже не нужно, это никак не ускорит работу системы. Работа с пулом там и так оптимизирована донельзя и создание нового процесса занимает микросекунды, потому там ничего не соберете...
Если уперлись в быстродействие, то начинайте с правильного кэширования.
Начиная с веб сервера, далее кеш сервер, обычно редис. (мемкешед почил в бозе...).
Далее трясем базу данных и работу с ней и т.д.

А вообще лучше практическую задачу обозначте, проще будет.
Ответ написан
Комментировать
Daemon23RUS
@Daemon23RUS
Что происходит, если приходит новый запрос во время перезагрузки, менеджер его ждёт, или передаёт запрос другому процессу?
Довольно важные моменты. Т.к. если перезагрузка как-то влияет на обработку поступившего запроса, т.е. заставляет его ждать, это не есть хорошо.

Все перечисленное ничтожно мало по времени ожидания по сравнению с тем, что перезагруженный воркер стартует с пустым opcahce, и вот тут мы и ловим "маленький" тормоз, который уникален для каждого и зависит от используемого кода на PHP
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы