Здравствуйте, подтармаживает сервак при большом количестве одновременных обращений к нашему php-скрипту. Есть ощущение, что сервак искусственно ставит наши запросы в очередь, если их больше какого-то числа, хотя ресурсов у сервера дофига и хватать должно абсолютно на все и с запасом.
У меня в настройках панели, есть 4 заветных параметра: 1) pm.max_children 2) pm.start_servers 3) pm.min_spare_servers 4) pm.max_spare_servers
К параметру pm.max_children у меня вопросов нет, я так понимаю, чем значение больше, тем большее количество php-процессов сервер может параллельно отрабатывать. Соответственно, я выкрутил этот параметр на максимум, так как ограничений по памяти и ядрам у меня нет (мощностей хоть жопой жри).
Однако, у меня есть вопросы к остальным трём параметрам. Я хоть и прочитал расшифровку в доках, но так и не понял, при каких значениях сервер будет работать быстрее? Увеличением потребления ресурсов можно пренебречь, так как мне именно это и надо: чтобы больше жрало, но и быстрее обрабатывало каждый отдельно взятый запрос.
Вы уверены что именно изменение этих параметров решит вопрос? Оптимизация - комплексный процесс, в первую очередь необходимо понять во что вы упираетесь.
Flying, да, я уверен, что это поможет, так как выкручивание pm.max_children уже помогло. Остальные параметры я хочу чисто для компании настроить, но не могу понять. Например, за что отвечают параметры pm.min_spare_servers и pm.max_spare_servers? Типа сервер ждет пока не накопится в буфере определенной кол-во обращений к дивжку php и только потом начинаешь шевелится и их отрабатывать? А если я хочу, чтобы php скрипты отрабатывали мгновенно, без оседания в буфере для ожидания? Тогда какое значение лучше выставить? Побольше? Поменьше?
Аналогичные непонятки с pm.start_servers. Написано, что это количество процессов при старте. А как это количество влияет на скорость и способность массово запускать php? Если выставить больше, то будет ли все быстрее работать? Или наоборот надо единицу ставить, если я хочу максимально быструю многопоточную отработку php? Чтобы запросы на использование php не ждали в очереди?
Надим Закиров, Вся эта информация есть в документации, по сути все эти настройки определяют логику запуска / отключения worker процессов в php-fpm и не более того. Вы в целом вообще можете попробовать использовать:
pm=static
pm.max_children=100500 # или сколько там вам нужно
и все worker процессы будут запущены сразу. Конечно по памяти это самый невыгодный вариант, но если вам её не жалко или для теста - вполне себе решение. А дальше уже надо будет смотреть помогает или нет и искать во что же вы упираетесь.
Flying, вроде разобрался, спасибо. В документации понятнее написано, я а то описание на стороннем сайте читал и там навели туману на детали работы этих параметров.
Когда-то я пользовался таким способом:
1. вычисляем свободную память = весь объём памяти - объём памяти занимаемый системой.
Например: 32 Гб - 8 Гб = 24 Гб потенциально свободной памяти.
2. вычисляем среднюю память занимаемую одним процессом PHP:
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
Например: 36 Мб
Примечание: php-fpm в строке выше замените на вашу, если отличается, например php5-fpm
Команда top, htop в помощь
Блокировка сессий скорее всего у Вас.
Для группы пользователей "все"/"everyone" - сессий внутри кода обработки быть не должно.
Проверьте тестом ab на скрипт без сессий.
А потом - с сессиями (с изменением хотя бы одной сессионной переменной).
И посмотрите на разницу в скорости обработки.
Посмотрите на тайминги выполнения запросов/ответов к БД.
Кэшируйте часто используемые и редко изменяемые данные в памяти (профиль или боковые панели веб-страницы, к примеру) и обновляйте кэш при их модификации (отслеживайте "флагом" с простым запросом в БД, например).
Сессии не используются, кеширование не нужно, так как сервак выполняет роль прокси и парсера. В целом все и так хорошо, я просто спросил насчет этих 3 параметров, в надежде, что кто-то разжует, но уже сам разобрался. За ответ все равно спасибо)
Александр, min_spare_servers -> Желаемое минимальное число неактивных процессов сервера. Как я понял, это количество процессов которые будут гарантированно доступны в любое время для получения нагрузки. Изначально, в том источнике, где я читал было немного туманное описание и я все не мог понять суть. В общем, в контексте моей задачи, чем min_spare_servers выше, тем лучше.