Apache - mantenha-se vivo ou não vivo?

5

De acordo com os métodos e práticas recomendadas para o eCommerce de alto desempenho com o Magento Enterprise Edition (é necessário o registro), mantenha-o em atividade. para sites de alto tráfego)

mod_qos também pode desabilitar o suporte keep-alive quando o servidor estiver sem conexões livres.

Então, a questão é, devo ter keep-alive desativado / ativado em um servidor de memória baixa (360Mb), há um benefício em manter-se ativo?

Pergunta secundária: o keep-alive tem alguma coisa a ver com ter muitas conexões TIME_WAIT de acordo com o nestat?

As conexões TIME_WAIT estão perdendo recursos do servidor, devo tentar (como?) manter o número baixo?

    
por Cesar 20.11.2009 / 03:26

2 respostas

4

O benefício de manter ativo é que um cliente poderá solicitar mais de uma entidade do seu servidor sem ter que criar outra conexão TCP (handshake de 3 vias com suas viagens de ida e volta incluídas). O problema com isso é que, se você tiver um limite de conexão no Apache configurado como 300, se houver 300 conexões ativas, todas as outras terão que esperar até que os 300 primeiros clientes sejam concluídos e / ou o tempo limite expire.

Desativar o keep-alive forçará os clientes a criar uma conexão por solicitação. Quando o soquete está bem fechado em ambas as extremidades, ele entra no status TIME_WAIT, como você percebeu. Isso acontece para garantir que a porta usada nessa conexão não receba dados de uma conexão anterior por um tempo antes de estar disponível (veja isso , mas há muito mais por aí). No meu sistema linux, o / proc / sys / net / ipv4 / tcp_fin_timeout está configurado para 60 segundos. Você pode tentar reduzir isso, mas não desça muito. Quão longe? Depende de quantas conexões por segundo você está recebendo. Por 100-200 req / s, não se incomode em mudar o padrão.

    
por 20.11.2009 / 05:19
6

Em um servidor com pouca memória, você terá problemas com as atividades ativadas ativadas em qualquer escala. Isso ocorre porque o apache cria um thread ou processo por conexão, alocando por padrão 8 MB de pilha no Linux (que pode ser ajustado via configuração do Apache, em que grau depende do aplicativo). No seu servidor de 360 MB, isso provavelmente será um problema se cada cliente estiver mantendo aberta pelo menos uma e possivelmente duas conexões.

Este é, na verdade, um dos principais motivos pelos quais os servidores da Web baseados em eventos, como nginx e lighttpd foram criados - para permitir que os sistemas manipulem dezenas de milhares de conexões usando quantidades sãs de memória.

Então, eu desativo os keppalives na sua situação e convivo com o impacto no desempenho dos clientes. Ou talvez use algo como nginx na frente do apache para lidar com conexões voltadas para o usuário, intermediando solicitações para o Apache. Este é um modelo muito comum, efetivamente tratando o Apache como "pool de threads" para operações potencialmente bloqueadoras como acesso a disco ou banco de dados.

    
por 15.09.2010 / 15:11