Solicitações simultâneas Nginx e PHP-FPM do mesmo IP

1

Estou com problemas para atender a solicitações simultâneas que consomem tempo provenientes do mesmo IP.

  • A primeira solicitação deve levar 6 minutos para responder (isso é um comportamento normal, minha pergunta não é sobre levar menos tempo para responder)
  • O segundo pedido deve demorar menos de 100 ms para responder.

O que está acontecendo é que o servidor está aguardando a conclusão da primeira solicitação antes de enviar a segunda resposta de solicitação.

Minha configuração é um AWS EC2 com 2 vCores (acredito que isso seja útil para lidar com computação simultânea).

A solicitação passa por um servidor Nginx, para um processo php-fpm. Eu pensei que o problema era que eu desconfigurava o PHP-FPM. No entanto, depois de ler as informações, esta é minha configuração do 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

O que estou perdendo? Onde devo procurar para depurar esse comportamento

Não hesite em me dizer nos comentários se você precisar de mais informações para me ajudar, eu sou apenas um júnior ...

Obrigado a todos e tenham um bom final de semana

    
por Hammerbot 12.01.2018 / 10:28

1 resposta

1

O seu número de trabalhadores PHP em execução é muito baixo, então pode ser que a primeira requisição use todos os trabalhadores disponíveis para terminar e, portanto, a segunda requisição seja bloqueada.

Tente com estas configurações:

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

Os números reais reais dependem do tráfego real. Basicamente, max_children é o número máximo de trabalhadores disponíveis simultaneamente que podem atender a solicitações individuais, e você precisa ter um valor adequado que corresponda ao seu tráfego.

    
por 13.01.2018 / 14:27

Tags