Я переношу конфигурацию веб-сервера, который запускает приложения PHP с использованием PHP-FPM за nginx. На сервере около 40-50 (и их количество растет). Сервер представляет собой виртуальную машину с одним ЦП и оперативной памятью 1 ГБ. Хотя это небольшое количество ресурсов, с которыми можно поиграть, многие из них у меня стоят за балансировщиком нагрузки, и я предпочитаю масштабироваться по горизонтали, а не по вертикали.
В предыдущей конфигурации все vhosts работали из одного пула PHP-FPM под одним и тем же пользователем. Max-children было около 20, и сервер, похоже, справлялся с возложенной на него нагрузкой (всего около 100 000 обращений в день - не мега-трафик).
Думая о разделении этих сайтов, я подумываю о переходе к модели, в которой каждый виртуальный хост имеет свой собственный пул PHP-FPM, работающий под определенным пользователем для этого сайта, а затем перенаправляет этот пул в корневой каталог виртуального хоста. Однако даже при консервативных настройках дочерних элементов пула (начальное = 2) в режиме ожидания будет получено около 100 процессов FPM.
У меня вопрос: вызовет ли это проблемы? Есть ли какие-то проблемы с памятью при запуске такого количества процессов?
Последний бонусный вопрос: какие-нибудь подсказки ulimit для php-fpm, если я пойду этим подходом?
Я смотрел на то же самое.
Оказывается, решение - это диспетчер процессов по требованию для FPM. Просто установите:
pm = ondemand
Он позволяет 0 дочерних процессов FPM, если нет совпадений. Они создаются для каждого пула при попадании в пул и закрываются по истечении тайм-аута.