2008-09-16 20 views
3

これは共有ホスティング環境です。私はサーバーを制御しますが、必ずしもコンテンツを管理する必要はありません。私はPerlスクリプトを持ったクライアントを持っています。このスクリプトは、制御がなくなり、プロセスが終了するまでプロセッサの50%を吸い取ってしまうようです。 ASPスクリプトでIISでPerlスクリプトの実行時間を制限するにはどうすればよいですか?

、私は、スクリプトを実行できる時間を制限することができるよ、とIISは、単に、たとえば、後に90秒を、それをシャットダウンします。 Perlスクリプトではcgiプロセスとして実行されているため(実際にはスクリプトを実行するための外部プロセスを起動するため)、これはPerlスクリプトでは機能しません。

同様に、消費されているリソース(プロセッサ)がWP自体ではなく子プロセスによって噛み砕かれているため、ワーカープロセスで過剰なリソース消費を探す技術では、これを認識しない可能性があります。

実行に時間がかかるPerlスクリプト(または他のcgiタイプのプロセス)を中止する方法はありますか?どうやって?? UNIXスタイルのシステムで

+0

設定の詳細について教えてください。 –

答えて

1

、私は私がかもしれないタイムアウトを期待される行動を開始する前に、タイマーを開始するアラーム機能を使用し、その後、ALRMイベントをトラップシグナルハンドラを使用します。アクションが完了したら、アラーム(0)を使用してアラームをオフにして正常に終了します。そうしないと、シグナルハンドラがすべてを正常に終了するようになります。

私はしばらくの間、Windowsでperlを扱っていませんでしたが、Windowsは多少POSIXyですが、これは動作するとは限りません。使用しているプラ​​ットフォームでシグナルがサポートされているかどうか、またはどれくらいの範囲であるかを確認するために、perlのドキュメントをチェックする必要があります。

alarm()を使った信号処理とこの種の自己破壊プログラミングの詳細な情報はPerl Cookbookにあります。ここでは簡単な例で別のポストから持ち上げて少し変更します:

「CPU制限をIIS」これらのヒットを与えるためにグーグルで
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

:「

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

この1上の更新...

それは、この特定のスクリプトは明らかに少しバグがあることが判明し、Googlebotは「それのボタンを押してください」と狂気、それを駆動する不思議な能力を持っていること。このスクリプトは、カレンダー処理を行う古い商用アプリケーションです。どうやら、「次の月」と「前の月」のリンクを表示していて、「次の月」を何度も続けると、崖から落ちます。しかし、結果として得られるページにはまだ「次の月」のリンクが含まれています。 Googlebotはこのスクリプトを絶えず打ち負かすことになり、プロセッサを噛んでしまいます。

不思議なことに、disallow:/とrobots.txtを追加することで問題は解決しませんでした。Googlebotが既にスクリプトを取得していて、緩んでいないか、robots.txtを無視していたかのいずれかです。

とにかく、Microsoftのプロセスエクスプローラ(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)は、perl.exeプロセスの環境をより詳細に見ることができたので、大きな助けとなりました。問題。

robots.txtが問題を解決できないことを知った後、私はIISを使ってこのサイトのすべてのトラフィックを* .googlebot.comからブロックすることができました。この場合はうまくいきましたGoogleがこのコンテンツのインデックスを作成するかどうかは気にしないためです。

誰もが投稿した他のアイデアをありがとう!

エリック・ロングマン

関連する問題