Назад | Перейти на главную страницу

Одновременные запросы Nginx и PHP-FPM с одного IP

У меня возникают проблемы с обслуживанием одновременных трудоемких запросов, поступающих с одного IP-адреса.

Что происходит, так это то, что сервер ожидает завершения первого запроса перед отправкой второго ответа на запрос.

Моя конфигурация - AWS EC2 с 2 виртуальными ядрами (я считаю, что это полезно для обработки одновременных вычислений).

Запрос проходит через сервер Nginx в процесс php-fpm. Я думал, что проблема в том, что я неправильно сконфигурировал PHP-FPM. Однако после прочтения информации это моя конфигурация php-fpm:

$ cat www.conf | grep max_children     
;   static  - a fixed number (pm.max_children) of child processes;
;             pm.max_children      - the maximum number of children that can
;             pm.max_children           - the maximum number of children that
pm.max_children = 5

$ cat www.conf | grep start_servers    
;             pm.start_servers     - the number of children created on startup.
pm.start_servers = 2

$ cat www.conf | grep min_spare_servers
;             pm.min_spare_servers - the minimum number of children in 'idle'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 1

$ cat www.conf | grep max_requests     
;pm.max_requests = 500

$ cat www.conf | grep max_children     
;   static  - a fixed number (pm.max_children) of child processes;
;             pm.max_children      - the maximum number of children that can
;             pm.max_children           - the maximum number of children that
pm.max_children = 5

Что мне не хватает? Где мне искать, чтобы отладить такое поведение

Не стесняйтесь сообщать мне в комментариях, если вам нужна дополнительная информация, чтобы помочь мне, я всего лишь младший ...

Спасибо всем и хороших выходных

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

Попробуйте со следующими настройками:

pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3

Фактические полезные числа зависят от вашего фактического трафика. В принципе, max_children - это максимальное количество одновременно доступных воркеров, которые могут обслуживать отдельные запросы, и вам нужно иметь там правильное значение, соответствующее вашему трафику.