O Apache sempre fornece erros incorretos de "fora de discussão"?

2

Ultimamente, nosso servidor da web Apache nos causou esse erro várias vezes por dia:

[Tue Apr 06 01:07:10 2010] [error] Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting

Aumentamos a configuração de ThreadsPerChild de 50 para 100, mas ainda recebemos o erro. Nossos registros de acesso indicam que esses erros nunca acontecem em períodos de alta carga. Por exemplo, aqui está um trecho do nosso log de acesso (endereços IP e alguns URLs são editados para fins de privacidade). Como você pode ver, o erro acima ocorreu às 1:07 e apenas um pequeno número de solicitações ocorreu nos vários minutos que levaram ao erro:

99.88.77.66 - - [06/Apr/2010:00:59:33 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-icons_222222_256x240.png HTTP/1.1" 304 -
99.88.77.66 - - [06/Apr/2010:00:59:34 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 200 111
99.88.77.66 - - [06/Apr/2010:00:59:34 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 200 111
99.88.77.66 - mpeu [06/Apr/2010:00:59:40 -0400] "GET /some/dynamic/content HTTP/1.1" 200 145049
55.44.33.22 - mpeu [06/Apr/2010:01:06:56 -0400] "GET /other/dynamic/content HTTP/1.1" 200 12311
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/jquery-ui-1.7.1.custom.css HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-1.3.2.min.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-ui-1.7.1.custom.min.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery.tablesorter.min.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/date.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image1.gif HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image2.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image3.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image4.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image5.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image6.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image7.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/pdfs/image8.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/pdfs/image9.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/pdfs/imageA.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:59 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:59 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png HTTP/1.1" 200 110
55.44.33.22 - - [06/Apr/2010:01:06:59 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png HTTP/1.1" 200 110
11.22.33.44 - mpeu [06/Apr/2010:01:18:03 -0400] "GET /other/dynamic/content HTTP/1.1" 200 12311
11.22.33.44 - - [06/Apr/2010:01:18:03 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-1.3.2.min.js HTTP/1.1" 304 -
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/jquery-ui-1.7.1.custom.css HTTP/1.1" 200 27374
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-ui-1.7.1.custom.min.js HTTP/1.1" 304 -
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/jquery.tablesorter.min.js HTTP/1.1" 200 12795
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/date.js HTTP/1.1" 200 25809

Por que vale a pena, estamos executando a versão do Apache que vem com o Oracle 10g (versão 2.0), e estamos usando mod_plsql para gerar nosso conteúdo dinâmico. Como o servidor Apache é executado como um processo separado e o banco de dados não registra nenhum problema quando esse erro ocorre, duvido que o Oracle seja o problema.

Infelizmente, os erros estão enlouquecendo nossos administradores de sistema, que estão inclinados a culpar todos e quaisquer problemas que ocorram com o servidor neste erro. Esse é um bug conhecido no Apache que simplesmente não consegui encontrar nenhuma referência através do Google?

EDIT: A pedido da Embreau, aqui estão as configurações que estamos usando (note que os específicos do Unix, como MinSpareServers, estão comentado) [OUTRO EDIT - exceto por ThreadsPerChild , estes são todos os valores padrão que existiam na instalação]:

ServerType standalone
Timeout 300
SendBufferSize 16384
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MaxRequestsPerChild 0
ThreadsPerChild 100
#MinSpareServers 5
#MaxSpareServers 20
#MaxClients 150
EDIT: Este é um sistema Windows Server 2003 em execução em um servidor Itanium 2 de 1,6 GHz de 64 bits com 16 GB de RAM. Nós começamos a fazer alguns registros para determinar a quantidade de carga que o servidor está sob enquanto esses erros ocorrem; nossos logs do Apache mostram que quase ninguém está acessando o site, mas há processos de coleta de dados acontecendo em segundo plano, então talvez um deles tenha atrasado o Apache o suficiente para causar alguns problemas ou algo do tipo.

    
por Eli Courtwright 06.04.2010 / 23:26

2 respostas

2

Embora suas configurações tenham espaço para melhorias, como o que a Embreau mencionou, elas podem não ser a causa direta.

É potencialmente o seu aplicativo ou algo ao longo da pilha causando o problema.

Por exemplo, se seu aplicativo estava aguardando uma resposta de um banco de dados, ele poderia eventualmente fazer com que todos os threads estivessem aguardando, causando problemas mesmo em carga baixa. Esse desempenho seria frequentemente examinado por conexões ativas de banco de dados.

O mesmo desempenho pode ser exibido por um bug de aplicativo e seria mais difícil isolá-lo. Embora isso seja verdade, a menos que haja indícios de que essa seja a causa, eu focaria as duas coisas abaixo primeiro.

Existe um motivo específico pelo qual você tem ThreadsPerChild ou SendBufferSize configurado? Com ThreadsPerChild , a menos que haja uma necessidade incomum ou você tenha dado a devida atenção ao seu uso, o padrão deve estar correto. Se não for ajustado adequadamente, pode esgotar a memória física e começar a trocar, o que reduziria o desempenho.

MaxRequestsPerChild definido como 0 é imprudente. Se o seu aplicativo tiver vazamentos de memória, os filhos do Apache nunca reciclarão. Você quer que eles reciclem.

Eu estou supondo que você é um desenvolvedor. Os administradores do sistema devem trabalhar em conjunto com você para resolver esse problema, já que é definitivamente um problema multifuncional.

    
por 12.04.2010 / 15:57
2

O seu valor de tempo limite está definido para 300 segundos, que é de 5 minutos, configure-o para um valor mais razoável, como 15 ou 30 segundos.

Agora, seu problema pode estar no valor ThreadsPerChild. Defina pelo menos 250. Por favor, monitore a mudança no gerenciador de tarefas sob carga para ter certeza de que não é um exagero (provavelmente não é, eu o configurei mais alto em alguma CPU antiga de um único núcleo servindo sites ocupados).

Se bem entendi, é um sistema operacional Windows? Em caso afirmativo, qual e em que tipo de hardware? (cpu e memória)

    
por 08.04.2010 / 00:33