如何限制IIS中Perl脚本的执行时间?

时间:2008-09-16 18:02:51

标签: perl iis iis-6 hosting cgi

这是一个共享托管环境。我控制服务器,但不一定是内容。我有一个带有Perl脚本的客户端,它似乎时不时地失去控制并吸收50%的处理器直到进程被杀死。

使用ASP脚本,我可以限制脚本运行的时间,而IIS只会在90秒之后将其关闭。这对Perl脚本不起作用,因为它作为cgi进程运行(并实际启动外部进程来执行脚本)。

类似地,在工作进程中寻找过多资源消耗的技术可能不会看到这种情况,因为正在被消耗的资源(处理器)正被子进程而不是WP本身咀嚼。

有没有办法让IIS中止一个运行时间太长的Perl脚本(或其他cgi类型的进程)?如何??

4 个答案:

答案 0 :(得分:1)

在UNIX风格的系统上,我会使用信号处理程序捕获ALRM事件,然后在启动我预期可能超时的操作之前使用警报功能启动计时器。如果动作完成,我会使用闹钟(0)来关闭闹钟并正常退出,否则信号处理人员应该把它拿起来优雅地关闭所有内容。

我暂时没有在Windows上使用perl,虽然Windows有点POSIXy,但我不能保证这会起作用;你必须检查perl文档,看看你的平台上支持信号的程度或程度。

有关信号处理的更多详细信息以及使用alarm()的这种自毁编程可以在Perl Cookbook中找到。这是一个简短的例子,从另一篇文章中解脱出来并进行了一些修改:

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);
};

答案 1 :(得分:1)

ASP脚本超时适用于所有脚本语言。如果脚本在ASP页面中运行,则脚本超时将关闭违规页面。

答案 2 :(得分:1)

关于这个的更新...

事实证明,这个特殊的剧本显然是一个小小的车,并且Googlebot具有“按下它的按钮”并让它疯狂的神奇能力。该脚本是一个较旧的商业应用程序,可以进行日历记录。显然,它显示“下个月”和“上个月”的链接,如果你按照“下个月”过多次,你就会从悬崖上掉下来。但是,生成的页面仍包含“下个月”链接。 Googlebot将不断击败该剧本并扼杀处理器。

奇怪的是,使用Disallow:/添加robots.txt并没有解决问题。 Googlebot已经获得了脚本的支持并且不会放松,否则它只是忽略了robots.txt。

无论如何,Microsoft的Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)是一个巨大的帮助,因为它允许我更详细地查看perl.exe进程的环境,并且我能够从中确定它是Googlebot导致我的问题。

一旦我知道(并确定robots.txt无法解决问题),我就可以直接使用IIS阻止来自* .googlebot.com的所有流量到这个网站,在这种情况下运行良好,因为我们不关心Google是否对此内容编制索引。

非常感谢大家发布的其他想法!

Eric Longman

答案 3 :(得分:0)

谷歌搜索“iis cpu limit”给出了这些命中:

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/38fb0130-b14b-48d5-a0a2-05ca131cf4f2.mspx?mfr=true

“CPU监视功能监视并自动关闭消耗大量CPU时间的工作进程。为各个应用程序池启用CPU监视。”

http://technet.microsoft.com/en-us/library/cc728189.aspx

“通过使用CPU监视,您可以监视工作进程的CPU使用情况,并可选择关闭占用大量CPU时间的工作进程.CPU监视仅在工作进程隔离模式下可用。”