MaxClients continua sendo superado no servidor de aplicativos da web

2

Estou executando um aplicativo da Web em uma máquina CentOs 6 com 4 GB de memória e 3 núcleos de processador (Intel Xeon 2,9 Ghz).

Todas as manhãs entre 8h30 e 9h30 (que coincide com o período de tempo em que a maioria das pessoas entra para trabalhar e começa a usar este aplicativo), o Apache pára de receber novas solicitações porque a configuração MaxClients ultrapassa 256 (que era o padrão).

Em qualquer momento, tenho 15 usuários usando o aplicativo e os horários de atividade neste aplicativo são entre 8h30 e até as 16h30.

Para tentar entender o que pode fazer com que essa configuração de MaxClients seja superada, comecei a monitorar quantas solicitações minha máquina está fazendo para o servidor durante e após o carregamento da página. Cerca de 40 minutos de monitoramento resultaram nisso:

Como pode ser visto, meu aplicativo da web usa CometChat para permitir que os usuários interajam uns com os outros e, após o carregamento da página, toda a atividade é proveniente do CometChat fazendo solicitações AJAX para obter atualizações.

Neste momento, executei este comando no shell para obter o número de apache threads em execução:

pidof httpd | wc -w

O resultado foi: 245. Esse número aumenta consistentemente depois que eu reinicio o Apache. A memória média (residente) ocupada por esses processos é de cerca de 18M .

245 processos com 18M por processo resultam em mais de 4 GB de uso de RAM.

Agora, para minhas perguntas:

  • O meu cliente (ou CometChat em nome do meu cliente) está fazendo muitas solicitações? A quantidade de dados transferidos é excepcionalmente alta?
  • O que eu faço para evitar que a configuração MaxClients seja superada?

Este é um tempo de tráfego baixo para nós. Nos próximos meses, o tráfego só aumentará. Qualquer ajuda é apreciada!

    
por karancan 19.07.2013 / 19:58

1 resposta

1

Muitas vezes, o processo httpd ainda está presente, mas não está atendendo a solicitações de clientes.

Você tentou aumentar a quantidade de MaxClients e ServerLimit enquanto reduziu MaxRequestsPerChild?

Se você não puder aumentar o MaxClients por causa da memória, tente limitar os StartServers e o MinSpareServer MaxSpareServer ao mínimo (algo em torno de ambos os 5).

Diminuir o valor de MaxRequestsPerChild reciclará o processo muito mais rapidamente, mas não permitirá aceitar mais clientes ao mesmo tempo, mas ajudará a evitar o congestionamento no caso de um cliente se manter conectado ( no nível TCP ou com um Keep-Alive).

Você também pode tentar forçar a desativação do Keep-Alive a fim de garantir que cada solicitação seja fechada corretamente (e, em seguida, reciclada)

Por fim, se você não puder ajustar e efetivamente tiver 256 clientes simultaneamente, deverá observar como aumentar a memória.

    
por 06.12.2013 / 18:37