2 votes

Apache se bloque avec une surcharge de mémoire/cpu lorsque google crawler visite le site

J'ai un site à faible trafic, moins de 500 visites par jour. Il dispose de 6G de mémoire et celle-ci est largement sous-utilisée, en moyenne 5% est utilisée. Mais dès que googlebot établit une connexion à mon serveur web/apache, l'utilisation de la mémoire et du cpu monte en flèche en quelques secondes et le serveur devient inaccessible - site web, ssh et tous les autres services.

Lorsque je fais lsof pour le port 80, voici ce que je vois avant que le site ne s'effondre en quelques secondes.

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

Google Bot est réglé sur une vitesse d'exploration lente.

La configuration d'Apache est la suivante :

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

Le journal des erreurs indique :

Cannot allocate memory: couldn't create child process: /opt/suphp/sbin/suphp

2voto

laebshade Points 796

Mon travail consiste à bloquer activement Googlebot et d'autres robots d'exploration sur les serveurs lorsque la charge augmente ; je ne suis certainement pas d'accord avec cela et, à mon avis, c'est un signe de quelque chose de bien pire avec le serveur en général lorsque nous devons le bloquer, bien que nous hébergions des milliers de sites web différents ; vous, en revanche, semblez avoir votre propre serveur.

Ce qui me fait penser, comme Rilindo l'a deviné, qu'il y a quelque chose qui ne va pas dans votre configuration. L'exemple de configuration que vous avez donné comporte au moins un élément qui sort du lot :

MaxRequestsPerChild 100 

Savez-vous que cela conduit Apache à tuer rapidement les processus enfants et à en créer de nouveaux ? La valeur par défaut est de 10000, dans la plupart des cas. Je commencerais par la fixer à 10000 et je verrais ce que cela donne.

Je vois également que vous utilisez suphp ; à moins que vous n'ayez beaucoup d'utilisateurs différents sur votre système et que la sécurité soit un problème, je recommande d'utiliser mod_php à la place. mod_php est un module Apache qui permet à Apache de traiter PHP, plutôt que d'avoir un exécutable PHP séparé qui s'occupe du travail. Cela permet de partager la mémoire et le temps CPU avec Apache (en supposant que vous utilisiez un MPM threadé, comme worker ou event), ce qui permet de réduire la charge globale.

Si l'utilisation de mod_php n'est pas envisageable pour des raisons de sécurité, je recommande de passer à mod_fcgid ; c'est à peu près un remplacement direct de suphp, mais beaucoup plus rapide.

0voto

Rilindo Points 5018

Je suppose que vous voulez savoir si vous voulez bloquer GoogleBot, ce que vous pouvez faire en ajoutant un fichier robots.txt et d'autres mesures trouvées ici :

http://www.google.com/support/webmasters/bin/answer.py?answer=9370

Cependant, 256 est un chiffre assez bas pour une machine de 6 gigaoctets. En fait, si vous exploitez un site contenant essentiellement des fichiers statiques, le pire qui puisse arriver est que vous atteigniez le maximum de 256 serveurs.

Utilisez-vous une application Web PHP/mySQL ou MVC, par exemple Ruby on Rails, Django, ou une sorte de site CMS ? Si c'est le cas, vous devriez probablement jeter un autre coup d'œil à ce site. Il se peut que ce(s) site(s) présente(nt) des problèmes qui ne sont révélés qu'avec un grand nombre de connexions telles que celles générées par GoogleBot.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X