Настройка производительности PHP-FPM - всплески трафика - PullRequest
5 голосов
/ 21 марта 2019

У меня есть веб-приложение, написанное на Laravel / PHP, которое находится на ранних стадиях и обычно обслуживает около 500 - 600 запросов / мин . Мы используем Maria DB и Redis для кэширования, и все на AWS.

Для событий, которые мы хотим продвигать на нашей платформе, мы рассылаем push-уведомление (мобильная платформа) всем пользователям, что приводит к примерно 2-минутному всплеску трафика, который приводит нас к 3,5 тыс. Запросов / мин

В нашем текущем масштабе сервера это полностью перегружает ЦП серверов приложений, которые обычно работают при 10% ЦП . Базы данных и кластеры Redis выглядят хорошо во время этого взрыва.

Глядя на журналы, кажется, что все процессы рабочего пула PHP-FPM заняты и начинают ставить в очередь запросы от восходящего потока Nginx.

В настоящее время у нас есть:

  • три сервера m4.large (2 ядра, 8 ГБ ОЗУ каждый)

  • динамическое управление процессами PHP-FPM с максимумом 120 дочерних процессов (серверы) в каждом блоке

Мои вопросы:

1) Должны ли мы увеличить пул FPM? Кажется, что в отношении памяти, мы, вероятно, приближаемся к нашему пределу

2) Должны ли мы уменьшить пул FPM? Кажется возможным, что мы запускаем так много процессов, что процессор зависает и не может по-настоящему завершить ни один из них. Интересно, если бы мы получили лучшие результаты с меньшими затратами.

3) Должны ли мы просто использовать большие коробки с большим количеством ОЗУ и ЦП, что позволит нам добавить больше рабочих FPM?

4) Есть ли какие-либо настройки производительности FPM, которые мы должны рассмотреть? Однако мы используем Opcache, стоит ли нам переходить на статическое управление процессами для FPM, чтобы сократить накладные расходы на процессы, вращающиеся вверх и вниз?

1 Ответ

4 голосов
/ 21 марта 2019

Слишком много дочерних процессов по отношению к количеству ядер.

Во-первых, вам нужно знать состояние сервера в нормальное и пакетное время.

1) Проверьте количество процессов php-fpm.

ps -ef | grep 'php-fpm: pool' | wc -l

2) Проверьте среднее значение нагрузки .При 2 ядрах, 2 или более означает, что начало работы отложено.

top
htop
glances

3) В зависимости от услуги мы начинаем настраивать двойное количество ядер.

; Example
;pm.max_children = 120       ; normal) pool 5, load 0.1 / burst) pool 120, load 5  **Bad**
;pm.max_children = 4    ; normal) pool 4, load 0.1 / burst) pool 4, load 1
pm.max_children = 8    ; normal) pool 6, load 0.1 / burst) pool 8, load 2  **Good**

нагрузка 2 = максимальная производительность 2 ядра


Более точно тестировать веб-сервер с нагрузкой, аналогичной фактической нагрузке, в тесте apache (ab).

ab -c100 -n10000 http://example.com

Time taken for tests:   60.344 seconds
Requests per second:    165.72 [#/sec] (mean)
 100%    880 (longest request)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...