Problema do Apache MaxClients

5

Nos meus registros de erro, vejo:

server reached MaxClients setting, consider raising the MaxClients setting

Minha configuração de MaxClients é 150. No entanto, quando eu calculo o que parece ser uma configuração ideal de MaxClients, eu obtenho:

Mem used by 1 Apache process = 16
Mem available to Apache = 197

MaxClients = 12 (197/16)

Então eu deveria deixar o MaxClient com 12 porque meus cálculos mostram que é toda a RAM que tenho disponível ou devo aumentar o limite como o log de erros sugere (ou os meus cálculos são inúteis porque eu estou entendendo mal alguma coisa)? / p>     

por Lothar_Grimpsenbacher 14.02.2011 / 00:59

2 respostas

5

Considere configurar KeepAlive Off em seu httpd.conf, se você estiver executando um Apache prefork. Em vez de cada criança que mantém uma conexão inativa aberta, o Apache fechará cada conexão após cumpri-la. Isso reduzirá as conexões gerais e os processos filhos necessários para veiculação. Isso adiciona um pouco de tempo extra, pois cada novo pedido precisa renegociar com o servidor, em vez de reutilizar uma conexão aberta.

(editar) Ah sim a pergunta. Eu deixaria o MaxClients sozinho ou configurei com base na RAM que você tem. Supondo que você tenha RAM mais que suficiente, regra geral é 2-4x o número de núcleos de CPU que você assume que seu backend não é muito lento, senão use RAM como fator limitante. No entanto, acho que desligar o KeepAlive irá diminuir o número de crianças que você precisa para algo razoavelmente normal e você vai parar de atingir o limite.

(edit2) Agora aqui é onde fica complicado. Se o seu servidor Apache é um servidor de aplicativos que executa principalmente PHP, Ruby, etc, código e dados de processo que ele obtém de vários backends ou disco em páginas renderizadas, a regra 2-4x funciona. Geralmente, você queimará 250ms de CPU por visualização de página se a página não estiver armazenada em cache ou 4 exibições de página por núcleo. Se você tiver um servidor autônomo, poderá atender a mais solicitações porque muitas delas serão imagens pequenas, css, js, etc, que normalmente seriam exibidas em outro conjunto de servidores para um servidor de aplicativos. Eu suponho que você tem um servidor, então deixar a coisa toda sozinha provavelmente está na sua melhor aposta.

No meu último trabalho, rodamos máquinas de front-end de 8 núcleos / 8 GB com 50 MaxClients e KeepAlive Off, o que funcionou muito bem. Em alguns casos, a definição de MaxClients para 100 obteve benchmarks um pouco melhores, mas a latência geral da geração de páginas aumentou porque, na maioria das vezes, estávamos bloqueando vários back-ends ou começando a passar fome pela CPU.

    
por 14.02.2011 / 01:32
1

Em vez de executar esse cálculo, eu tentaria ver o que seu servidor é realmente capaz de manipular. Esse cálculo é mais ou menos uma linha guia, mas para ter certeza sobre o seu servidor, você só precisa enfatizá-lo para descobrir se isso é possível.

    
por 14.02.2011 / 01:05