O problema foi encontrado para ser o ASA fechando conexões persistentes após um período de tempo, quando ele fecha as conexões, ele também foi configurado para não enviar RST
mensagens quando uma chamada é feita novamente.
Para entender por que isso causa um problema, posso ilustrá-lo aqui.
- O Apache cria a primeira conexão que é bem-sucedida.
- Após um atraso maior que o tempo de reinicialização do ASA, o ASA fecha a conexão.
- A solicitação é feita e o Apache tenta enviar o que acha que é uma conexão aberta e atinge o tempo limite após
TimeOut
- padrão 300 segundos - O Apache envia um erro ao cliente
O problema aqui é amplificado se houver várias conexões em pool ainda abertas. Por exemplo, se o Apache começou com 5 conexões agrupadas, e após o fechado acima, ele ainda exibirá esse comportamento mais 4 vezes antes que um cliente receba uma solicitação bem-sucedida.
Existem várias maneiras de superar isso.
- Permitir que o ASA envie mensagens de
RST
para os clientes nos quais confia. - Defina a configuração de
mod_proxy:ProxyPass - keepalive
paraOn
- Defina a configuração para
mod_proxy:ProxyPass - ttl
para algo menor que o tempo de redefinição do firewall.
Não tente configurar mod_proxy:ProxyPass - timeout
e mod_proxy:ProxyPass - connectiontimeout
muito baixo, como se você tivesse operações de longa execução existentes em sua instância tomcat, por exemplo, qualquer serviço da Web ou ponto de extremidade ReST, então elas podem começar a falhar se demorarem mais do que desta vez.
Nossa solução é fazer as duas primeiras opções.