O pedido de HTTP não chega ao servidor ocasionalmente. Por quê?

1

Hospedamos nosso serviço da web em um servidor dedicado. Às vezes (eu diria 1 de 20) uma resposta não é recebida do servidor. Isso faz com que o navegador recaia com o erro de tempo limite.

Um detalhe importante: o pedido não é registrado pelo Apache neste caso. O servidor não está carregado, há muita memória livre e energia de CPU sobrando.

Eu analisei o caso do problema com o utilitário tcpdump. Estas são as sessões "boas" e "ruins" rastreadas pelo tcpdump. O pedido é o mesmo em ambos os experimentos. Bom - o servidor retorna a resposta. Ruim - sem resposta, erro de tempo limite.

Você vê por que o problema acontece com esses dados? Como posso avançar para me aproximar da fonte do erro?

Eu substituí meu endereço IP real por 123.45.67.890

---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------

---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------

Detalhes sobre o serviço.

Este é um serviço de relatórios meteorológicos. Está escrito em Perl, apoiado pelo MySQL. O script usa vários módulos (do CPAN e do nosso).

O código é relativamente simples. O script faz o download do clima de outro servidor, converte o formato de dados e retorna a resposta XML. O clima é armazenado em cache no MyISAM DB. Existe uma base de dados de localizações mundiais (INNODB) que também pode ser solicitada através do script.

Hospedagem: SuperbHosting SO: Ubuntu

    
por par 18.01.2010 / 20:08

4 respostas

0

O problema era um grande número de conexões TCP abertas, uma vez que novas conexões foram descartadas ocasionalmente por causa disso.

    
por 09.02.2010 / 21:12
1

Tente usar tcpdump ou wireshark para monitorar o tráfego da rede. Dessa forma, pelo menos você saberá se há um problema de rede. Ou seja verifique se a solicitação atinge a máquina.

Além disso, por padrão, a maioria dos navegadores tem um número limitado (2) de conexões que podem ser feitas para um e o mesmo servidor. Se a sua página tiver alguns objetos javascript que "esquecem" de fechar conexões, etc., pode ser que o navegador nunca realmente envie a solicitação.

    
por 18.01.2010 / 20:13
1

Você pode tentar sua solicitação usando apenas endereços IP? Nesse caso, isso pode ajudar a diminuir o problema.

Todos os pedidos são provenientes do mesmo local e têm o problema? Se assim for, tente outro local, talvez um laptop em um Starbucks ou algo assim. Se isso acontecer em mais de um local, usando diferentes navegadores, em uma página muito simples sem AJAX ou com Javascript complicado, isso é uma informação valiosa.

Se o uso do endereço IP funcionar de forma confiável, é provável que seja DNS. Saber o nome do domínio em uso pode ajudar a reduzi-lo.

    
por 18.01.2010 / 20:26
1
Eu iria com Michael Gaff e depois colocaria algum dinheiro na empresa de hospedagem - esses tipos de problemas de tráfego acontecem muito facilmente com patch panels, nics, problemas de driver ou cabos ruins, entre outras mil coisas de infra-estrutura. / p>

Estou contando com você ter tentado isso de diferentes locais (ou ter relatórios de outros lugares com os mesmos problemas) e obtido o mesmo problema, de modo que possamos descartar um problema no final, correto?

Eu sou um fanático por hardware, então eu tendem a me inclinar para falhas de hardware como a causa de problemas estranhos de software e rede e destruição em massa em geral.

    
por 19.01.2010 / 12:17