2008-09-16 63 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