Oi Rodrigo,

A algum tempo atrás tivemos umas quedas inexplicáveis aos fins de semana (quase todos os fins de semana) também aqui nos sites da empresa. O estranho era que o tráfego cai 92% aos finais de semana, então não era nada associado com consumo excessivo de banda por uso de milhares de conexões de clientes.

Como usamos apache+plone, usando virtual hosts, só podia ou ser um bug no apache, ou no plone. Apontei pro apache mesmo....
Fui atrás do log do apache e vi coisas assim:

<log>
*
"(70007)The timeout specified has expired: proxy: error reading status line from remote server 127.0.0.1, referer: http://www.google.com.br/search?hl=pt-BR&q=fideliza%C3%A7ao&start=30&sa=N";

"The timeout specified has expired: proxy: error reading status line from remote server 127.0.0.1"

"proxy: Error reading from remote server returned by /"
*
</log>

A explicação ao pé da letra é que ao ocorrer este problema é por que 1 dos 3 itens abaixo ocorreu (variáveis de erros do Apache):
- Timeout na rede (lentidão de resposta na rede local) * Erro 70007;
- Conexão reiniciada pelo servidor Plone (serviço web) * Erro 104;
- Fim do arquivo encontrado, é repassado ao Apache um cabeçalho falso indicando que a página chegou ao fim * Erro 70014;


Isto pode ocorrer por problemas na rede ou problemas no servidor de backend (Plone) ou por causa da condição de "race"
(definição de prioridade) do código proxy.

Atualmente está condição de "race" disparada ao servidor backend (plone) pode fechar a conexão "corretamente" de um pacote que está em vôo ("on the fly" ou "keepalive") depois que o serviço httpd do Apache checa o estado da conexão TCP e, começa a enviar requisições ao Plone, aguardando uma conexão que já está morta.

Segundo as discussões no site do Apache, isso é um fato que deveria ocorrer raramente e os browsers (ou robos) tentariam enviar novamente uma requisição a página sem a interferência do Apache (tentativa de resposta sem consulta prévia).

No fim das contas, o python ia a 100%, travava e caia...  :-(((


Vimos então que não era só o Google ou Cuil que gerava isso, mas quase todos os buscadores :-(

Fui atrás do problema e descobri que tratava-se de um bug do apache no modulo proxy ( *mod_proxy* )



Este bug foi relatado aqui [1]:


<bug>

**mod_proxy: Trigger a retry by the client in the case we fail to read the  
response line from the backend by closing the connection to the client.
PR 37770**

</bug>


O *PR 37770* foi relatado aqui [2].


A solução sugerida era ou migrar para a versão 2.2.10 do Apache (versão atual), onde o bug esta corrigido, ou colocar dois parametros no arquivo de configuração do virtual host:


*Exemplo:*

################
#seusite.conf

NameVirtualHost seuip:80
<VirtualHost seuip:80>

*  SetEnv force-proxy-request-1.0 1
 SetEnv proxy-nokeepalive 1*

</VirtualHost>


Mesmo migrando para a versão 2.2.10, o problema persistiu. Só depois de colocar os parâmetros dentro do arquivo de configuração, o problema parou.

**
[1] : https://issues.apache.org/bugzilla/show_bug.cgi?id=37770

[2]: http://svn.apache.org/viewvc?view=rev&revision=645813

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Responder a