Apache аварийно завершает работу с перегрузкой памяти / процессора при посещении сайта сканером Google
У меня есть сайт с низким трафиком, менее 500 просмотров в день. Он имеет 6G памяти и используется недостаточно, в среднем используется 5%. Но как только googlebot устанавливает соединение с моим веб-сервером /apache, использование памяти и процессора резко возрастает в считанные секунды, и сервер становится недоступным - веб-сайт, ssh и все другие службы.
Когда я делаю lsof для порта 80, вот что я вижу, прежде чем сайт падает за считанные секунды.
lsof -i: 80 мой сайт: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
2 ответа
Моя работа активно блокирует робота Googlebot и других сканеров на серверах при скачке нагрузки; Я, конечно, не согласен с этим, и, на мой взгляд, это признак чего-то гораздо худшего с сервером в целом, когда нам приходится его блокировать, хотя мы размещаем тысячи различных веб-сайтов; у вас, с другой стороны, кажется, есть собственный сервер.
Как я уже догадался, Рилиндо догадывается, что с вашей конфигурацией что-то не так. Пример конфигурации, который вы дали, имеет по крайней мере один элемент, который торчит как больной большой палец:
MaxRequestsPerChild 100
Знаете ли вы, что это заставляет Apache быстро убивать дочерние процессы и создавать новые? По умолчанию это 10000, в большинстве случаев. Я бы начал с установки 10000 и посмотрел, куда это вас приведет.
Я также вижу, что вы используете suphp; если у вас в системе много разных пользователей, для которых важна безопасность, я рекомендую вместо этого использовать mod_php. mod_php - это модуль Apache, который позволяет Apache обрабатывать PHP, а не иметь отдельный исполняемый файл PHP, обрабатывающий работу. Это позволяет распределять память и процессорное время через Apache (при условии, что вы используете многопоточное MPM, такое как рабочий или событие), что означает общее снижение нагрузки.
Если использование 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.