2008-09-16 53 views
3

这是一个共享的宿主环境。我控制服务器,但不一定是内容。我有一个Perl脚本的客户端,它似乎无时无刻地控制着它,并且一直处理掉处理器的50%,直到这个过程被终止。如何限制IIS中Perl脚本的执行时间?

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

同样,在工作进程中寻找额外资源消耗的技术可能不会看到这一点,因为消耗的资源(处理器)正在被子进程而非WP本身咀嚼。

有没有办法让IIS放弃运行时间过长的Perl脚本(或其他cgi类型的进程)?怎么样??

+0

你可以提供关于如何配置的更多信息吗? – 2008-09-16 18:17:02

回答

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); 
}; 
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/en-us/library/cc728189.aspx

“通过使用CPU监控,可以监控CPU使用率的工作进程和可选关闭消耗大量的CPU时间的工作进程。CPU监视仅在工作进程隔离模式下可用。”

1

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

1

在这一个更新...

事实证明,这个特殊的脚本显然是一个小马车,那Googlebot的具有“按它的按钮”,并驾驶它疯狂的不可思议的能力。该脚本是一个较旧的商业应用程序,可以进行日历。显然,它会显示“下个月”和“上个月”的链接,如果你多次关注“下个月”,你会掉下悬崖。但是,生成的页面仍然包含“下个月”链接。 Googlebot会不断将剧本击败并咀嚼处理器。

奇怪的是,添加一个robots.txt与Disallow:/没有解决问题。无论Googlebot是否已经掌握了该脚本,都不会放弃,否则它只是无视robots.txt。

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

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

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

Eric Longman