Too Many ESTABLISHED conexão de um único endereço IP no Apache

1

netstat -ntp |grep 80 mostra muitos ESTABLISHED de conexão de um único endereço IP. Cerca de 300 deles e não é um ataque e o usuário está usando uma conexão 2G para acessar o Apache. Este é o caso com outras conexões 2G também. Como resultado deste Apache está ficando sem filhos.

Anteriormente, estava mostrando muitos close_wait e depois de ativar tcp_tw_reuse e tcp_tw-recycle não há muito close_wait , mas o número de ESTABLISHED de conexões aumentou.

Estamos usando o Ubuntu 11.04 com 48 GB de RAM

keepalive On
keepalive timeout 10
max clients 800
max-request-perchild 4000
timeout 300

Eu defini syn_ack para 1 e syn_retries para 2.

Em wifi não existe tal problema. Conexões estão fechando corretamente, mas com conexões 2G o Apache está ficando sem filhos e muitos ESTABLISHED conexão.

Também tentei definir o tempo limite do padrão 300 a 30, mas como o nosso projeto é hospedagem de imagens para telefones celulares, os clientes não puderam fazer o upload de imagens corretamente, pois estão recebendo tempo freqüente. foram um monte de 408 mensagens então mudaram para o padrão 300

    
por ananthan 14.05.2012 / 16:24

3 respostas

2

tcp_tw_reuse and tcp_tw-recycle and tcp-fin_timeout to 30

O tempo limite da aleta ajuda aqui, mas reutiliza e recicla? Por quê?

keepalive timeout 10

Isso é bobagem. Mesmo com o acesso discado, isso deve ser de 3 ou menos.

timeout 300

Você sabe o que isso faz? Este pode ser o padrão, mas é muito alto novamente.

Você pode tentar capturar parte do tráfego usando wireshark para ver exatamente por que as conexões não estão fechando.

Is using mod_reqtimeout an option

Somente se o cliente estiver muito mal e você não estiver preocupado em fornecer um serviço para eles.

should we move to ngnix server

Ele certamente irá lidar com conexões lentas muito mais facilmente, no entanto você pode querer usar como um proxy (e você pode seletivamente / transparentemente rotear determinadas sub-redes usando isto usando iptables)

    
por 16.05.2012 / 10:31
2

O problema está relacionado a clientes de baixa velocidade. A melhor maneira de resolver isso é usar solução de proxy reverso, por ex. nginx, verniz ou software similar se a partir do seu apache. Um bom servidor proxy reverso pode lidar com milhares de conexões sem problemas.

Por que a configuração do Nginx é inversa proxy uma boa ideia?

    
por 16.05.2012 / 08:50
1

Você tentou eliminar a diretiva Timeout para algo muito menor, como 10 ou 5 ?

Alternativamente, você poderia tentar sair do prefork MPM (se possível) e usar um modelo orientado a eventos, como o evento MPM no Apache 2.4 ou um servidor web diferente, como o nginx.

Você também pode usar o nginx (ou similar) como um proxy reverso na frente do Apache. O proxy esperará até receber toda a solicitação antes de fazer a solicitação de upstream ao Apache. Esta solicitação não terá atrasos no meio dela.

O problema com a falta de crianças Apache também pode ser causado ou exacerbado pelas configurações de Keepalive que você tem. Considere desligar ou reduzir o valor keepalive timeout . Torná-lo muito baixo pode torná-lo inútil, claro.

    
por 14.05.2012 / 16:35