O Webserver para de aceitar novas conexões

1
Estou com problemas em um servidor Centos 5 todas as noites quando o yahoo rastreia o site e o interrompe no processo. Eu monitorei o servidor enquanto ele está sob o fluxo do Yahoo e a memória nunca está esgotada, então ele nunca atinge a partição swap. A carga nunca parece exceder 1,5. Eu não acho que houve um problema, a menos que o apache pare de aceitar as conexões de entrada por algum tempo.

Eu suspeito que o problema tenha algo a ver com o servidor não aceitar nenhuma conexão nova, mas isso é um território obscuro para mim.

Alguém pode me ajudar a descobrir o que está acontecendo aqui ou me direcionar para algum material que eu possa aprender.

EDITAR:

Eu executei o comando netstat fornecido por Glenn Kelley em um loop while que é executado a cada 20 segundos. Quando notei que comecei a ter mais de 5 conexões ESTABLISHED de cada vez (minha norma) o número CLOSE_WAIT começaria a subir para cerca de 40 - 60. Neste ponto, eu adicionei 'mysqladmin proc stat' ao loop while e notei que Eu tinha um script de backup que estava executando o mysqldump naquele momento.

Aparentemente, o mysqldump estava bloqueando todas as tabelas no banco de dados, o que impedia que gravações acontecessem. Devido a isso e ao coincidente rastreamento do yahoo (40 páginas por minuto), o servidor eventualmente deixaria de aceitar solicitações de entrada para o Apache depois que o MaxClients fosse atingido.

Agora estou procurando usar a replicação do MySQL para permitir backups sem bloqueio ou encontrar um horário melhor para executar meus backups. Usar mysqldump com --skip-lock-tables não é uma opção para mim e eu não posso usar mysqlhotcopy como tenho algumas tabelas InnoDB.

    
por Doug Miller 09.11.2010 / 23:00

4 respostas

1

Existem algumas coisas que você pode fazer aqui.

  1. Você ajustou o servidor para permitir x quantidade de conexões de 1 IP?
  2. A instalação de mod_evasive deve ajudar bastante.
  3. Execute o netstat para ver se algum outro tráfego está atingindo o sistema:

netstat -ntu | awk '{print $ 5}' | corte -d: -f1 | classificar | uniq -c | classificar -n

Esse comando listará cada ip que chega ao servidor e quantas conexões ele possui.

  1. Edite usando seu editor favorito (FIRST BACKUP PLEASE) este arquivo /usr/local/apache/conf/httpd.conf

Altere as principais opções: (sintonize ao seu gosto e necessidades, é claro)

MaxKeepAliveRequests 50 (100) KeepAliveTimeout 60 (30)

Edições adicionais que podem ajudar em cada uma das seguintes variáveis Tempo esgotado KeepAliv MinSpareServers MaxSpareServers MaxClients

MUDANÇA 1 DE VEZ - desta forma você sabe o que está mudando e ... se um ou outro machuca ou ajuda.

A adição de ferramentas adicionais do Anti-DDOS também pode ajudar. Os scripts do InetBase podem ajudar - dependendo do seu uso.

link

E finalmente - um simples proxy reverso pode realmente fazer a diferença. Um desses seria NGINX

Você está usando um painel de controle por acaso? se sim - sabendo qual - pode ajudar a comunidade a te ajudar um pouco mais ...

    
por 10.11.2010 / 04:02
1

Eu já vi algo assim antes ...

Meu palpite é que você tem um link ruim que nunca termina .. então o processo aguarda .. e aguarda e aguarda .. A próxima consulta atinge o mesmo link .. e aguarda e aguarda e aguarda ..

Basicamente, ele continua fazendo isso até que todos os processos estejam em uso .. e você pode aceitar mais: (

Verifique o placar (para ver quais URLs estão presos antes de reiniciar o servidor)

    
por 09.11.2010 / 23:14
0

Verifique também se o log do mysql está ativado e verifique se max_connections não está sendo alcançado (supondo que seu aplicativo da web esteja usando o mysql).

    
por 10.11.2010 / 05:50
0

Seria útil se você fornecesse detalhes de como seu servidor da web está configurado, o número de conexões, o número de conexões yahho, a duração média e máxima.

Parece que você tem uma combinação ruim para maxClients e MaxKeepAliveRequests / KeepAliveTimeout

    
por 10.11.2010 / 14:06

Tags