A configuração básica do servidor httpd do Apache se torna lenta para exibir imagens que exigem reinicialização freqüente

2

Eu tenho um servidor httpd Apache em execução no RHEL 5.3. Eu estou usando este servidor para servir conteúdo estático (imagens) para um site em execução em outra instância httpd. No diretório da web público, há várias imagens, e isso é tudo. Algum tempo após a inicialização, o servidor se torna muito lento para exibir imagens no navegador e pode ficar suspenso por vários minutos enquanto tenta exibir uma PNG 16x16.

Qual é a melhor maneira de depurar esse problema?

Eu corri topo na caixa para verificar se há memória livre suficiente e CPU disponível. A máquina não está entrando em swap, e o processo httpd ocupa apenas CPU e memória por alguns segundos quando a imagem é solicitada pelo navegador. No entanto, a imagem só é retornada com frequência após alguns minutos.

Um reinício do processo httpd resolve o problema e as imagens são carregadas rapidamente.

Esta parece ser a configuração mais simples de um servidor web possível. Qual poderia ser o problema?

Obrigado

UPDATE : configurações do httpd.conf:

Timeout 10
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 15
ServerLimit 3

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
    
por Alex 28.07.2011 / 23:45

3 respostas

1

Algumas perguntas:

Você fez algum ajuste no arquivo Apache.conf? Qual Apache MPM você está usando?
Quais parâmetros estão atualmente definidos no arquivo Apache.conf para:

Timeout
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
MinSpareServers
MaxSpareServers
StartServers
MaxClients
MaxRequestsPerChild
    
por 28.07.2011 / 23:57
1

Sugestões diagnósticas:

  1. Você verificou CPU e memória, mas seria uma boa idéia para assistir a largura de banda de disco e outras estatísticas também (sugiro dstat -af). Você está procurando por coisas como uma grande quantidade de leituras ou gravações em disco, muitas interrupções ou interrupções de contexto, outras medidas que variam muito entre o início do servidor e o comportamento do servidor quando está com problemas.

  2. Outra coisa a verificar é descobrir se o comportamento é uma função da passagem do tempo ou do número de solicitações, ou ambos.

    • Inicie o servidor, não solicite imagens por algumas horas e, em seguida, solicite uma imagem, a solicitação é rápida ou?
    • Inicie o servidor, solicite imagens o mais rápido possível (use o loopback para evitar a latência da rede) e veja quanto tempo leva para alcançar um determinado nível pré-determinado de lentidão (por exemplo, uma resposta de 10 segundos)
  3. Teste para ver se é um problema de rede. Quando o servidor estiver com problemas (por exemplo, respostas de 10 segundos), solicite uma imagem por meio da interface de loopback. Se retornar rapidamente, olhe para a rede. Se lento, você provavelmente pode ignorar problemas de rede fora do seu host.

por 29.07.2011 / 05:47
1

Use mod_status para verificar e monitorar o status do servidor. Eu acho que a maioria das conexões estão esperando no status KeepAlive. Você pode tentar desligá-lo ou diminuí-lo para um valor baixo, como KeepAliveTimeout 4.

    
por 29.07.2011 / 10:59