2017-01-10 12 views
2

У меня проблема с nginx + php7.0-fpm.nginx php-fpm конфигурация, поражающая детей ограничение

Тестирование выполняется на чистом сервере php без каких-либо установленных сервисов.

Я получаю следующее предупреждение.

WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 35 total children 

И это сильно замедляет работу сервера.

Я использую AWS t2.medium instance - 2vCPU и 4GB RAM.

Мои php7.0-fpm/www.conf созданы выглядит как

pm = dynamic 
pm.max_children = 50 
pm.start_servers = 20 
pm.min_spare_servers = 10 
pm.max_spare_servers = 20 
pm.max_requests = 500 

У меня есть приложение Laravel, что я использую для тестирования, который просто отвечает на запросы {"m":"OK"}.

Я проверил, что с помощью apache2-utils

ab -n 1000 -c 50 https://mytestserver.com/ 

ответ от ab теста ->https://ghostbin.com/paste/528tw

И я наблюдаю использование процессора с помощью htop.

Использование двух процессоров быстро достигает 100% во время теста ab. Однако использование памяти - только 400MB.

Почему он слишком сильно использует процессор? Что мне делать, чтобы получить ВНИМАНИЕ от php-fpm?

Что я делаю неправильно? Прошу вас, провери меня.

Спасибо.

+0

Я думаю, вы не должны порождать гораздо больше детей, чем ядра процессора. у вас всего 2 виртуальных ядра, я бы только породил 2 дочерних сервера. – DanFromGermany

+0

@DanFromGermany, который один из вечера. относится к дочерним серверам? – moeseth

+0

'nginx' намного быстрее, когда речь идет о принятии запросов, чем PHP в их обработке. Это означает, что «nginx» подает «php со слишком большим количеством запросов и« fpm »не может своевременно обрабатывать его, дети заняты, и вы получаете это предупреждение. Вы не можете исправить это, потому что вы нажмете на предельный уровень ЦП - или, если хотите, это будет так же быстро, как PHP будет «идти» на вашем сервере. Когда этот сценарий случается, этот веб-сервер работает намного быстрее, тогда мы начинаем использовать несколько серверов с 'php-fpm', а nginx может балансировать между ними. Поднятие любой из этих конфигурационных переменных ничего не сделает, вы выйдете из ядра и мощности процессора. – Mjh

ответ

3

Вы можете не только учитывать использование памяти PHP, но и одновременное использование ЦП.

Если у вас слишком много дочерних серверов, это только сделает все хуже и медленнее, и PHP не сможет обрабатывать больше запросов, он может полностью заблокировать все.

У вашего сервера слишком много памяти для всего 2 vCPU, или, наоборот, у него должно быть больше процессора, чтобы он соответствовал объему памяти.

Это больше подходит для 2-х ядер виртуальных процессоров:

pm = dynamic 
pm.max_children = 4 
pm.start_servers = 2 
pm.min_spare_servers = 1 
pm.max_spare_servers = 2 
pm.max_requests = 500 

Кроме того, когда вы делаете 50 одновременных запросов с Benchmark инструмент Apache, это совершенно нормально для только 2 VCPU сервер будет очень медленным. Тесты должны запускаться с другого компьютера.

Имейте в виду, что базовая ОС и ваш веб-сервер (nginx) также нуждаются в некотором использовании ЦП.

Ваш сервер AWS имеет ту же мощность, что и RaspberryPi, с немного большей памятью.

Полезный комментарий от Mjh:

100 запросов в секунду не плохо, если вы дойдете до точки, где у вас есть , что много - это большая проблема есть. Отказаться от SSL в пользу запросов в секунду, возможно, не самое лучшее, что можно сделать в этот момент. Конечно, я ничего не знаю о вашем сайте и о том, что вы используете его , или нужен ли SSL или нет, но наличие SSL имеет значение на ваш рейтинг в google. Это всегда min-maxing, а в случае SSL, если бы я был вами, я бы сохранил его.

+0

Теперь я получаю следующее ПРЕДУПРЕЖДЕНИЕ '[10-янв-2017 15:30:39] ПРЕДУПРЕЖДЕНИЕ: [pool www] сервер достиг настройки pm.max_children (4), подумайте о повышении его. И согласно 'ab', он может обрабатывать только 80 запросов/сек? Это нормально для 2vCPU и 4 ГБ оперативной памяти? Сервер приложений просто отвечает '{" m ":" OK "}' без логики. – moeseth

+0

Вам нужно сыграть с этими цифрами, но удерживайте их между 1 и 5.При производстве вы не хотите, чтобы ваш сервер постоянно находился на 100% в полном объеме. Вы хотите, чтобы он составлял около 60%, поэтому он может обрабатывать пики и не будет блокировать доступ к SSH. – DanFromGermany

+0

oh wow, aws 't2.medium' довольно дерьмо, и это стоит 45 долларов США в месяц. FML. – moeseth