У меня сайт с низкой посещаемостью, менее 500 посещений в день. У него 6 ГБ памяти, и он недостаточно загружен, в среднем используется 5%. Но как только googlebot устанавливает соединение с моим веб-сервером / apache, использование памяти и процессора резко возрастает за секунды, и сервер становится недоступным - веб-сайт, ssh и все другие службы.
Когда я выполняю lsof для порта 80, вот что я вижу до того, как сайт выйдет из строя за секунды.
lsof -i: 80 mywebsite: http-> crawl-66-249-71-200.googlebot.com:43567 (УСТАНОВЛЕН)
Google Bot настроен на медленную скорость сканирования.
Конфигурация Apache:
ServerLimit 256
MaxClients 150
MaxRequestsPerChild 100
KeepAlive Off
KeepAliveTimeout 5
MaxKeepAliveRequests 100
Журнал ошибок показывает:
Cannot allocate memory: couldn't create child process: /opt/suphp/sbin/suphp
Моя работа активно блокирует Googlebot и другие сканеры на серверах при скачках нагрузки; Я, конечно, не согласен с этим, и, на мой взгляд, это признак чего-то гораздо худшего с сервером в целом, когда мы должны его заблокировать, хотя мы размещаем тысячи разных веб-сайтов; у вас же, похоже, есть собственный сервер.
Это заставляет меня поверить, как и предположил Рилиндо, что что-то не так с вашей конфигурацией. В приведенном вами примере конфигурации есть по крайней мере один элемент, который торчит, как больной палец:
MaxRequestsPerChild 100
Знаете ли вы, что это заставляет Apache быстро уничтожать дочерние процессы и создавать новые? По умолчанию в большинстве случаев это 10000. Я бы начал с установки 10000 и посмотрел, к чему это приведет.
Я также вижу, что вы используете suphp; если в вашей системе много разных пользователей, которым важна безопасность, я рекомендую вместо этого использовать mod_php. mod_php - это модуль Apache, который позволяет Apache обрабатывать PHP, вместо того, чтобы иметь отдельный исполняемый файл PHP, обрабатывающий работу. Это позволяет разделять память и процессорное время через Apache (при условии, что вы используете многопоточный MPM, такой как worker или event), что означает общее снижение нагрузки.
Если использование mod_php не вариант из соображений безопасности, я рекомендую перейти на mod_fcgid; это в значительной степени замена suphp, но намного быстрее.
Я думаю, вы хотите знать, хотите ли вы заблокировать GoogleBot, что вы можете, добавив robots.txt и другие меры, найденные здесь:
http://www.google.com/support/webmasters/bin/answer.py?answer=9370.
Однако 256 - это довольно мало для 6-гигабайтной машины. Фактически, если у вас есть сайт, содержащий в основном статические файлы, худшее, что может случиться, - это максимум 256 серверов.
Вы используете PHP / mySQL или какое-либо веб-приложение MVC, например Ruby on Rails, Django или какой-нибудь сайт CMS? Если это так, вам, вероятно, нужно еще раз взглянуть на этот сайт. На этом сайте (-ах) могут быть некоторые проблемы, которые обнаруживаются только при большом количестве подключений, например, созданных GoogleBot.