Apache pendurado com MaxClients é atingido

5

Meu Apache 2.2 (Preform MPM) é interrompido quando MaxClients é atingido, em vez de enfileirar solicitações e atendê-las quando os processos filhos ficam livres. Quando isso acontece, o servidor da Web não responde até que seja reiniciado manualmente.

A pilha de servidores é Ubuntu 8, MySQL 5, PHP 5. Hardware é Dual Xeons (2.8) com 2GB de RAM. Ele atende de 30.000 a 50.000 pageviews por dia. Imagens estáticas, CSS e JS são transferidos para um servidor separado e o PHP é armazenado em cache usando o eAccelerator. A saída HTML de muitas páginas é armazenada em cache no sistema de arquivos.

Diretivas relevantes do Apache:

KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 2
StartServers          2
MaxClients          150
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   2000

    
por Ash White 02.09.2009 / 20:40

3 respostas

3

Parece que seu servidor está trocando. Assumindo um uso de 16 MB para os processos do apache, 150 x 16MB = 2400 MB, além da capacidade do seu servidor (2GB)

Verifique a memória usada pelo Apache, acho que você precisará reduzir o valor de MaxClients.

Você pode encontrar mais informações sobre isso na seção Problemas de hardware e sistemas operacionais do ajuste de desempenho do Apache

    
por 02.09.2009 / 20:51
1

Qual é a sua variável Tempo limite definida em?

Você pode querer pressioná-lo se não tiver definido:

Timeout 30

Como o HD disse, você pode querer colocar seus MaxClients no ar ou aumentar a RAM para garantir que ele não esteja atingindo o swap.

    
por 02.09.2009 / 20:54
0

Calcule MaxClients e defina um valor com base nisso em vez do valor padrão.

Calculando o máximo de clientes

primeiro calcule a memória média para os filhos do apache quando o tráfego estiver alto.

Divida isso com a memória que você deseja alocar para o Apache.

no seu caso, se você quiser dar 1 GB de RAM para o servidor web e o uso médio da mem do processo for de 16 mb, então 1000 MB / 16 = 62

este é o valor de max_client que você deve fornecer.

Verifique também se você está configurando o prefork em vez do trabalhador

if i am not wrong these are the variables for prefork-

MinSpareServers

MaxSpareServers      

MaxClients          

MaxRequestsPerChild   

desde que você esteja executando o mysql e o apache na mesma máquina.Você precisa adicionar mais RAM, caso contrário, ficará sem memória e iniciará a troca.Qual é mais lento ainda.

    
por 07.08.2012 / 10:14