Apache com mod_wsgi - como rejeitar pedidos se todos os threads estiverem ocupados?

1

Temos um servidor que está executando o Apache e um dos vhosts está usando mod_wsgi para executar uma tarefa pesada a pedido. O servidor pode processar solicitações X por vez e cada uma delas será executada por aproximadamente 10 minutos. Em vez de fazer com que novos clientes esperem se todos os encadeamentos estiverem ocupados, gostaria que o servidor respondesse imediatamente com um status 503 se nenhum encadeamento estivesse livre.

Eu tentei usar vários tempos limite para conseguir isso, mas não funciona como desejado. Isso é o que eu tentei (com apenas um thread), mas faz com que novos clientes esperem por 1800 segundos e respondam com um status 504.

WSGIDaemonProcess xxx user=xxx group=xxx processes=1 threads=1 connect-timeout=10 queue-timeout=10 deadlock-timeout=2000 socket-timeout=1800 listen-backlog=0

Como posso fazer o servidor aceitar apenas tantas conexões quantas forem as threads para o daemon WSGI?

(o servidor está executando o Ubuntu 14.04 com o Apache 2.4 e mod_wsgi 4.5)

    
por Niko 01.02.2017 / 22:59

1 resposta

0

Você pode usar a diretiva maxclients na configuração do apache para limitar o número de solicitações que o apache pode atender.

Por exemplo:

MaxClients 200

Permitirá apenas 200 clientes ao mesmo tempo.

(editar)

Se um vhost tiver problemas ou especificidades particulares, geralmente é uma boa ideia isolá-lo em uma instância dedicada do apache (pode estar no mesmo hardware).

Você pode tentar limitar as conexões em uma base por vhost, mas de acordo com este post, você precisa de módulos extras como mod_cban Apache limitando conexões por VHOST

(/ edit)

    
por 06.02.2017 / 10:32