Apache pendurado uma ou duas vezes por dia

1
Infelizmente, tivemos que mudar para o uso do KeepAlive após uma série de ataques de dods em nosso servidor. Eu corro um jogo na web para que as páginas sejam geralmente pequenas e largamente textuais, então ter o KeepAlive fora funcionou bem por muitos anos. As coisas não pareciam muito diferentes (além de serem capazes de lidar melhor com os ataques de ddos) após algumas mudanças rápidas de configuração e a carga do servidor fica razoavelmente baixa em média cerca de 0,50 com o uso de memória em cerca de 10% (total de 24GB). >

Uma vez por dia, no entanto, o apache apenas trava e não responde por cerca de 15 minutos. Mesmo ao longo do dia, às vezes as páginas demoram 5 segundos para carregar e noto no status do apache que a única coisa no placar são solicitações keepalive (leitura), sem espera de conexão, leitura de resposta, fechamento de conexão, etc. . Então se organiza. Parece aleatório quando isso acontece, embora seja normalmente durante uma hora movimentada do dia, nem a carga do servidor nem a memória é alta nem o apache está ficando sem os slots de solicitação disponíveis.

Minhas alterações de configuração são as seguintes:

ServerLimit 1024
MaxClients 1024
Timeout 2
KeepAliveTimeout 5
KeepAlive On
MaxKeepAliveRequests 100
MinSpareServers 100
MaxSpareServers 200

Espero que alguém tenha algum insight sobre isso ou possa sugerir quais logs / processos eu posso verificar para ver por que isso está acontecendo.

Obrigado antecipadamente.

EDIT: Incase isso ajuda ...

56 requests/sec - 116.2 kB/second - 2126 B/request
105 requests currently being processed, 154 idle workers

Mais tarde, eu esperaria o dobro disso.

EDIT 2: KeepAliveTimeout alterado de 5 para 2

EDIT 3: Aconteceu de novo. Desta vez eu estava por perto para ver. O Apache não respondia e não estava ocupando nenhuma memória. Havia 250 conexões de 127.0.0.1 e isso nunca acontece. Depois de um reinício do Apache, tudo estava bem. Muito estranho!

    
por Ant 25.11.2010 / 14:52

1 resposta

1

Algumas coisas que você pode fazer ou verificar:

  1. Tivemos um problema semelhante em que o Apache 1.3 não fechou corretamente as conexões, o que as deixou permanecendo para sempre e, eventualmente, preenchia todos os slots do cliente. Para contornar isso, apenas reiniciamos o Apache uma vez por dia em um script cron. O seu problema parece diferente, já que você menciona que, em algum momento, ele será limpo para que a reinicialização diária não ajude em nada.
  2. Eu suponho que você nunca está alcançando o "MaxClients" em conexões simultâneas?
  3. Qual é a sua configuração "KeepAliveTimeout"? O padrão é 15 segundos, o que é grande para a maioria dos sites com 1 ou 2 segundos, normalmente funcionando melhor (especialmente desde que seu "Tempo limite" esteja configurado para 2 de qualquer maneira).
  4. Marque "netstat -an" para sinais óbvios de DOS de um cliente. Descobri que, muitas vezes, quando há problemas não óbvios no site, isso ocorre devido a um cliente martelar o site continuamente com 20 solicitações por segundo. Verifique se você não está limitando a largura de banda do servidor (o que é fácil se você tiver apenas uma conexão de 10 Mbps). Uso os gráficos de monitoramento de largura de banda on-line do meu provedor, mas também deve haver maneiras de linha de comando para fazer isso (o ifconfig pode permitir). Existem várias soluções em nível de servidor ou Apache para evitar automaticamente ataques do DOS (sejam eles inocentes ou não).
  5. Marque "top" durante o problema e observe o uso da CPU, do IO e da memória. Certifique-se de que você não está trocando memória (o que você não deveria se você estivesse com 10% de uso de memória).
  6. Falando de memória .... 10% de uso de memória até mesmo de um servidor de 24GB de RAM parece baixo. Eu tenho vários servidores com 1-4GB de RAM e eles estão todos no uso de 75-90% de memória (muito do que está no cache do sistema operacional no entanto). Suponho que isso depende da configuração do Apache e do uso do servidor.
  7. Verifique se não há outros dead-locks na sua camada de aplicativo que estejam causando o problema (como um banco de dados). Por exemplo, verifique sua página "status de servidor" do Apache e, se ela for carregada rapidamente, mas a página do site regular for carregada lentamente, o problema provavelmente não será o servidor Apache.
  8. Verifique os registros em "/ var / log", particularmente os logs de erros do Apache e o log de "mensagens" para mensagens relevantes. Se você não tiver esses ou outros logs de aplicativos ativados, ative-os pelo menos temporariamente.
  9. Verifique os limites do sistema de coisas como o número de arquivos abertos permitidos por vez (ulimit -n). As configurações padrão de muitos servidores / SOs não são necessariamente configuradas para um servidor de alto volume.
  10. Se tudo o mais falhar, desafie suas suposições sobre o problema e verifique novamente os itens que "não podem" falhar ou que você já verificou.
por 25.11.2010 / 15:45

Tags