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

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

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

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

===============>>#1 票数: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的所有流量到这个网站,因为我们不喜欢如果谷歌对此内容编制索引,请注意。

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

埃里克朗曼

===============>>#2 票数: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);
};

===============>>#3 票数:1

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

===============>>#4 票数: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监视仅在工作进程隔离模式下可用。”

  ask by Eric Longman translate from so

未解决问题?本站智能推荐:

1回复

在iis 6.0中使用wcf msmq绑定

托管环境:Windows 2003服务器 IIS:6.0 Dev env:Windows XP IIS:5.1 场景: 客户端将把一些消息推送到MSMQ,WCF服务将是关注MSMQ的人。 一旦从MSMQ中提取消息,WCF服务将处理,然后将数据/消息放到其他MSMQ上。
2回复

配置IIS 6.0以执行cgi(.exe)

我已经创建了一个具有权限的虚拟目录(cgi-bin):Scripts和Executable ...当我测试: http://localhost/cgi-bin/mapserv.exe时 ,我收到404错误,找不到页面 我应该为.exe文件添加EXTENSION映射吗? 可执行文件?
6回复

如何将IE设置为IIS 6.1中的默认浏览器?

我使用IIS 6.1来托管Asp.net网站。如果我浏览IIS中的网站,它将在chrome中打开。当我在IIs中使用浏览时,我需要网站将在Internet Explorer中打开吗?将IE设置为IIS 6.1中的默认浏览器? 在浏览时。在IIS中需要进行哪些更改?
1回复

在IIS 6.0上从Linux共享提供文件

嗨,我正在尝试设置IIS服务器(6.0)以提供来自Linux共享的文件。 由于我对Linux非常不熟悉,因此我要求社区提供有关此方面的任何投入。 即使让IIS服务器从另一个Windows计算机共享中提供内容,我也遇到了问题,这可能是我们域的问题。 iis服务器不在域中。 当我想更
2回复

IIS 6.0可以响应多少个并发请求

我正在计划在Windows Server 2003上托管的Asp.net网站。在这里,我想知道IIS 6.0可以服务多少个并发请求? 实际上,在我的网站上,部署时的注册数量约为八千个,增长率约为100%。 是否有任何标准公式可用来计算IIS 6.0可以同时请求的服务器数量,因为它可以
2回复

将Delphi 6 CGI移至IIS 6,第二页不显示

我被要求将一些遗留的Delphi 6 Web应用程序(CGI .exe)从Windows 2000服务器移至Windows 2003。 我已经复制了该应用程序并按照原始服务器设置了虚拟目录,并按照Microsoft IIS的说明(在两个地方都设置了Web服务扩展)并添加了额外的用户权限,但
1回复

从IIS上运行的PERL脚本获取输出的问题

请注意,下面的子例程应该打印$ sting,其中包含由另一个Java程序生成的一堆信息。 问题是$ string最终为空,这表明该命令甚至没有运行。 当我在IIS之外运行此脚本时,实际上得到了期望的输出。 有任何想法吗?
2回复

如何在IIS下的Perl CGI中将进程完全后台化

多亏了这里的其他精彩文章(例如this和that ),我有几种可靠的方法来使Perl脚本中的进程成为后台。 但是,在我的环境(Windows Server 2003上为IIS6)中,它似乎并没有完全成为背景。 使用以下脚本: 在睡眠过程运行时,浏览器将保持“连接”状态10秒钟。
1回复

为什么我的IIS上的Perl CGI程序出现“错误的网关”错误?

我试图在Windows 7上运行示例Perl脚本,并且将IIS 7配置为允许ActivePerl运行,但出现此错误: 这是我的Perl脚本:
1回复

以管理员身份运行CGI Perl脚本

我正在为网站编写Perl脚本,并且需要能够通过该网站控制VirtualBox。 我不确定从哪里开始,或者不确定是否要在正确的区域进行调试,但是这里有问题。 我的服务器在Windows Server 2008 R2上运行IIS7。 我还通过vboxmanage命令行界面运行2个虚拟机。