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

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

How can I limit execution time for a Perl script in IIS?

这是一个共享的托管环境。我控制服务器,但不一定控制内容。我有一个带有Perl脚本的客户端,该客户端似乎有时会失控,然后消耗50%的处理器,直到进程被杀死。

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

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

是否有办法使IIS中止运行时间太长的Perl脚本(或其他cgi类型的进程)?怎么样??


此更新...

事实证明,该特定脚本显然有点bug,而且Googlebot具有"按下按钮"并使其疯狂的超凡能力。该脚本是执行日历的较旧的商业应用程序。显然,它显示"下个月"和"上个月"的链接,并且如果您多次跟踪"下个月",您将跌跌撞撞。但是,结果页面仍包含一个"下个月"链接。 Googlebot会不断将脚本打死,并吞噬处理器。

奇怪的是,添加带有Disallow的robots.txt:/不能解决问题。 Googlebot要么已经掌握了该脚本,就不会放任自流,或者根本就是无视robots.txt。

无论如何,Microsoft的Process Explorer(http://technet.microsoft.com/zh-cn/sysinternals/bb896653.aspx)提供了巨大的帮助,因为它使我能够看到perl.exe的环境。进行了更详细的处理,因此我能够确定是引起问题的Googlebot。

我一知道(并确定robots.txt无法解决问题),便能够直接使用IIS阻止* .googlebot.com对该网站的所有访问,在这种情况下效果很好,因为我们不在乎Google是否会对此内容编制索引。

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

埃里克·朗曼


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


在UNIX风格的系统上,我将使用捕获ALRM事件的信号处理程序,然后使用警报功能启动计时器,然后再启动预期会超时的操作。如果操作完成,我将使用alarm(0)关闭警报并正常退出,否则信号处理程序应将其拾起以正常关闭所有内容。

我已经有一段时间没有在Windows上使用过perl了,尽管Windows有点POSIXy,但我不能保证这会起作用。您必须查看perl文档,以查看平台上是否支持信号或在何种程度上支持信号。

有关信号处理和使用alarm()进行的此类自毁编程的更多详细信息,可以在Perl Cookbook中找到。这是一个简短的示例,该示例摘自另一篇文章,并做了一些修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.\
"
;
        die"alarm\
"
;
    };

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

搜索" iis cpu限制"会产生以下结果:

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

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

http://technet.microsoft.com/zh-cn/library/cc728189.aspx

"通过使用CPU监视,您可以监视工作进程的CPU使用率,并有选择地关闭消耗大量CPU时间的工作进程。CPU监视仅在工作进程隔离模式下可用。""


推荐阅读

    linux打开控制台命令?

    linux打开控制台命令?,工作,系统,信息,地址,命令,目录,基础,工具,管理,第一,l

    linux控制台保存命令?

    linux控制台保存命令?,状态,系统,命令,电脑,文件,编辑,终端,模式,历史,存在,l

    linux控制台创建命令?

    linux控制台创建命令?,工作,地址,系统,命令,信息,目录,管理,名字,文件,控制

    linux脚本多个命令?

    linux脚本多个命令?,系统,工作,标准,服务,命令,软件,管理,连续,电脑,设备,lin

    linux控制台多命令行?

    linux控制台多命令行?,工具,服务,情况,地址,连续,命令,窗口,终端,脚本,控制

    linux脚本注释命令?

    linux脚本注释命令?,代码,系统,工作,名称,地方,脚本,命令,信息,状态,简介,lin

    脚本运行linux命令?

    脚本运行linux命令?,系统,环境,工具,工作,位置,底部,代码,发行,官网,终端,lin

    linux命令测试客户端?

    linux命令测试客户端?,地址,系统,网络,工具,工作,分析,环境,命令,下行,资料,l

    linux命令下写脚本?

    linux命令下写脚本?,服务,系统,环境,代码,名称,命令,脚本,发行,在线,情况,三

    linux命令行远程控制?

    linux命令行远程控制?,系统,地址,服务,网络,电脑,软件,工具,实时,网站,命令,W

    linux命令的执行时间?

    linux命令的执行时间?,时间,系统,周期,信息,命令,设备,环境,地址,基础,进程,l

    linux把命令变成脚本?

    linux把命令变成脚本?,系统,环境,工作,脚本,命令,信息,基础,代码,文件,变量,

    脚本调用linux命令?

    脚本调用linux命令?,代码,系统,工作,底部,脚本,位置,环境,行用,官网,标准,typ

    linux全程控制命令?

    linux全程控制命令?,地址,工作,命令,基础,系统,网络,管理,目录,控制台,路径,l

    linux命令怎么控制的?

    linux命令怎么控制的?,地址,工作,系统,标准,命令,电脑,基础,管理,灵活,网站,l

    linux控制台停止命令?

    linux控制台停止命令?,地址,工具,平台,网络,下来,电脑,状态,命令,程序,进程,L

    linux脚本命令输信息?

    linux脚本命令输信息?,系统,信息,代码,脚本,数据,工具,发行,命令,变量,文件,l

    linux上启动脚本命令?

    linux上启动脚本命令?,服务,状态,系统,代码,脚本,工作,周期性,命令,文件,方

    linux下编写脚本命令?

    linux下编写脚本命令?,代码,时间,工具,标准,系统,实战,平台,最新,网站,文件,l

    linux定时器脚本命令?

    linux定时器脚本命令?,系统,代码,时间,工具,工作,定期,周期性,异常,任务,脚