Apache travando com sobrecarga de memória / cpu quando o rastreador do google visita o site

2

Eu tenho um site com pouco tráfego, menos de 500 acessos por dia. Tem um 6G de memória e é subutilizado, em média, 5% está em uso. Mas assim que o googlebot estabelece uma conexão com meu servidor / apache, a memória e o uso da CPU aumentam em segundos e o servidor fica inacessível - website, ssh e todos os outros serviços.

Quando eu faço lsof para a porta 80, aqui está o que eu vejo antes do site travar em segundos.

lsof -i: 80 mywebsite: http- > crawl-66-249-71-200.googlebot.com: 43567 (ESTABELECIDO)

O Google Bot está definido para uma taxa de rastreio lenta.

A configuração do Apache é:

ServerLimit 256 
MaxClients 150 
MaxRequestsPerChild 100 
KeepAlive Off 
KeepAliveTimeout 5 
MaxKeepAliveRequests 100

O log de erros mostra:

Cannot allocate memory: couldn't create child process: /opt/suphp/sbin/suphp
    
por Daniel t. 10.07.2011 / 23:44

2 respostas

2

Meu trabalho bloqueia ativamente o Googlebot e outros rastreadores nos servidores quando a carga aumenta; Eu certamente não concordo com isso, e na minha opinião, é um sinal de algo muito pior com o servidor em geral quando temos que bloqueá-lo, apesar de estarmos hospedando milhares de sites diferentes; você, por outro lado, parece ter seu próprio servidor.

O que isso me leva a acreditar, como Rilindo adivinhou, é que há algo errado com sua configuração. A configuração de amostra que você deu tem pelo menos um item que se destaca como um dedão dolorido:

MaxRequestsPerChild 100 

Você está ciente de que isso faz com que o Apache mate rapidamente os processos filhos e crie novos? O padrão para isso é 10000, na maioria dos casos. Gostaria de começar por defini-lo para 10000 e ver onde isso leva você.

Eu também vejo que você está usando o suphp; a menos que você tenha muitos usuários diferentes em seu sistema onde a segurança é uma preocupação, eu recomendo usar mod_php. O mod_php é um módulo do Apache que permite ao Apache processar o PHP, em vez de ter um executável PHP separado manipulando o trabalho. Isso permite que a memória e o tempo de CPU sejam compartilhados e encadeados por meio do Apache (supondo que você esteja usando um MPM encadeado, como worker ou event), o que significa uma carga geral reduzida.

Se usar mod_php não for uma opção devido a preocupações de segurança, recomendo mudar para mod_fcgid; é praticamente um substituto para o suphp, mas muito mais rápido.

    
por 11.07.2011 / 02:09
0

Acho que você quer saber se deseja bloquear o GoogleBot, o que pode ser feito adicionando um robots.txt e outras medidas encontradas aqui:

link

No entanto, 256 é bastante baixo para uma máquina de 6 gig. Na verdade, se você estiver executando um site com arquivos quase estáticos, o pior que poderia acontecer é que você atingisse no máximo 256 servidores.

Você está executando um aplicativo da Web PHP / mySQL ou algum MVC? Ruby on Rails, Django ou algum tipo de site CMS? Em caso afirmativo, você provavelmente precisará dar outra olhada nesse site. Esse (s) site (s) pode (m) ter alguns problemas que são expostos somente com um grande número de conexões, como as geradas pelo GoogleBot.

    
por 11.07.2011 / 01:42