我有一个网站stream量低,一天不到500次。 它具有6G的内存,并且使用率低,平均有5%被使用。 但是,一旦googlebotbuild立了一个连接到我的web服务器/ Apache,内存和CPU使用率在几秒钟内尖峰,服务器变得无法访问 – 网站,SSH和所有其他服务。
当我为端口80做lsof时,这是我在几秒钟内崩溃之前所看到的。
lsof -i:80 mywebsite:http-> crawl-66-249-71-200.googlebot.com:43567(ESTABLISHED)
Google Bot设置为缓慢抓取速度。
Apacheconfiguration是:
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和其他抓取工具; 我当然不同意这个观点,在我看来,这是整个服务器的一个更糟糕的迹象,当我们不得不阻止它的时候,尽pipe我们拥有数千个不同的网站。 另一方面,你似乎有自己的服务器。
正如Rilindo所猜测的那样,这使我相信,你的configuration有问题。 你给的样品configuration至less有一个项目像拇指一样突出:
MaxRequestsPerChild 100
你知道这会导致Apache迅速杀死subprocess并创build新进程吗? 在大多数情况下,默认值是10000。 我会先把它设置为10000,看看你到底在哪里。
我也看到你正在使用suphp; 除非你的系统上有很多不同的用户,在安全性方面,我build议使用mod_php。 mod_php是Apache模块,它允许Apache处理PHP,而不是有一个单独的PHP可执行文件处理工作。 这允许通过Apache共享内存和CPU时间(假设您正在使用线程化MPM,例如worker或event),这意味着总体上减less了负载。
如果由于安全考虑使用mod_php不是一个选项,那么我build议切换到mod_fcgid; 这几乎是suphp的替代品,但速度更快。
我想你想知道,如果你想阻止GoogleBot,你可以通过添加一个robots.txt和其他措施在这里find:
http://www.google.com/support/webmasters/bin/answer.py?answer=9370
但是,对于6台机器,256是相当低的。 事实上,如果你正在运行一个主要是静态文件的网站,可能会发生的最糟糕的情况是你最多只能在256个服务器上运行。
你正在运行一个PHP / mySQL或一些MVC Web应用程序,例如Ruby on Rails,Django或某种CMS站点? 如果是这样,你可能需要再看看该网站。 该网站可能有一些问题,只有大量的连接,如GoogleBot生成的连接。