Php запускается как демон. Внешний (по отношению к php) сервер по протоколу fastCGI передает запрос демону (какой файл исполнять), php выполняет этот файл и выдает ответ, внешний сервер транслирует его клиенту.
мне больше про process manager, например зачем он перезапускает пхп процесс, после опред. количество запросов, они как-то делят между собой запросы? spare_server - про это тоже хотел бы услышать, если можно. И что например если пришло 2к запросов, потом упало до 200, pm по убивает не нужные процессы?
А это все как в апаче. Если все чилдрены заняты, а запросы валят и валят - он рожает новых пачку, при этом в логах увидите сообщение, что, мол, все чилдрены заняты - рожаю еще. Когда запросов стало мало - ненужные чилдрены прибиваются. Суть тут в том, что адаптировать число чилдренов под текущую нагрузку, т.е. что бы все запросы обслуживались и был запас свободных чилдренов, ибо рожать чилдрена на каждый чих - очень затратно, нужнен запас переживать минипики нагрузки. spare_server - это и есть та пачка "свободных" запасных серверов, которую пытается поддерживать менеджер. Ну а перезапускается по очень простой причине - софт не идеален, возможны утечки памяти (т.е. занятая, но не используемая память, про которую процесс "забыл"). Самый оптимальный способ борьбы - перезапуск процесса, при котором вся его память высвобождается. Ставят обычно от нескольких сотен до нескольких тысяч запросов.
ЗЫ: хочу отметить, что динамическое управление хорошо, если у вас на сервере много пулов запущено.. например, под разными юзерями. Т.е. что-то вроде хостинговых решений. Если серввер под один фиксированный проект и обслууживается одним пулом php - лучше ставить статическое число детей. Таким образом вы точнее прогнозируете распределение памяти на сервере. А то пойдут запросы - динамический пул начнет расти, отъедать память у кеша ФС - пойдет дополнительная нагрузка на диск, из-за чего начнет тупить база, увеличивая время отклика скрипта, а значит потребуется еще больше php воркеров... и приехали.
У меня облако у selectel nginx/php5-fpm/mysql . Там стоит 3 сайта, у одного 10к уников в день, у второго 3-5к уников, у третьего до 200. Так на них лучше статик поставить?
Для облака, полагаю, лучше динамический.. там же поресурсно оплата, вроде. C spare тут все очень просто. min_spare - это сколько изначально висит свободных процессов, ну и сколько этих свободных будет поддерживать менеджер. Т.е. повысилась нагрузка, скушала все свободные - менеджер дофоркает новых так, что бы было min_spare свободных. Это повышает скорость реагирования сервера на пики загрузки - для них уже есть готовые воркеры. max_spare - это когда нагрузка падает, освобождаются воркеры, менеджер начинает их прибивать до тех пор, пока их не станет max_spare. Еще раз отмечу, что это idle процессы. Т.е. допустим min_spare = 5, max_spare = 10. На текущий поток клиентов достаточно 7 php воркеров - их общее число в системе будет 7+5, т.е. 12. Клиенты повалили, теперь нужно уже 21 воркер для них, опять же число процессов будет 21+5=26. Пик клиентов ушел, опять для них достаточно 7 воркеров. Менеджер начинает прибивать лишние, но оставляет не менее max_spare ожидающих процессов, т.е. в системе будет 7+10=17. В общем, числа весьма эмпирические, нужно в реальных условиях подбирать. Но как правило это единицы, очень редко - десятки, и mix от max отличается незначительно... редко кода max больше min в два раза, обычно меньше. 15к юников - это ничего не говорит, важны хиты и распределение нагрузки по времени. Мне кажется, что в вашем случае можно поставить min=5, max=5-10... и уже смотреть как идет отдача, смотреть логи fpm-а, что он говорит и т.д.