对于ASP脚本,我可以限制脚本运行的时间,IIS将在90秒后关闭它。但这对Perl脚本无效,因为它作为cgi进程运行(实际上启动外部进程来执行脚本)。
同样,寻找工作进程中过度资源消耗的技术可能看不到这一点,因为正在被消耗的资源(处理器)是由子进程而不是WP本身所吞噬的。
有没有办法使IIS中止运行时间过长的Perl脚本(或其他cgi类型的进程)?如何做到?
eval {
# Create signal handler and make it local so it falls out of scope
# outside the eval block
local $SIG{ALRM} = sub {
print "Print this if we time out, then die.\n";
die "alarm\n";
};
# Set the alarm, take your chance running the routine, and turn off
# the alarm if it completes.
alarm(90);
routine_that_might_take_a_while();
alarm(0);
};
关于这个问题的最新进展...
事实证明,这个特定的脚本似乎有点小毛病,而Googlebot有着惊人的能力来“按它的按钮”并让它发疯。该脚本是一个旧的商业应用程序,用于日历。显然,它显示了“下个月”和“上个月”的链接,如果你跟随“下个月”太多次,你就会掉下悬崖。然而,结果页面仍然包括“下个月”的链接。Googlebot会不断地折磨脚本并消耗处理器。
奇怪的是,添加一个带有Disallow: /的robots.txt并没有解决问题。要么Googlebot已经掌握了脚本并且不会放手,要么它只是忽略了robots.txt。
无论如何,微软的Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)非常有帮助,因为它允许我更详细地查看perl.exe进程的环境,并且我能够从中确定是Googlebot导致了我的问题。
一旦我知道了这一点(并确定 robots.txt 无法解决问题),我就能够直接使用 IIS 阻止所有来自 *.googlebot.com 的流量访问此站点,在这种情况下,这种方法效果很好,因为我们不在意谷歌是否索引此内容。
非常感谢大家发表的其他想法!
Eric Longman
ASP脚本超时适用于所有脚本语言。如果脚本在ASP页面中运行,则脚本超时将关闭有问题的页面。
在谷歌上搜索“iis cpu limit”会得到以下结果:
“CPU 监控功能可以监控并自动关闭消耗大量 CPU 时间的工作进程。CPU 监控已为各个应用程序池启用。”
http://technet.microsoft.com/en-us/library/cc728189.aspx
通过使用CPU监控,您可以监视工作进程的CPU使用情况,并选择关闭消耗大量CPU时间的工作进程。CPU监控仅在工作进程隔离模式下可用。