2013-11-21 37 views
6

Apache2のmod_fastcgi提供メソッドを使用するPerl Dancer Webアプリケーションがあります。アプリケーションはアップロードされたファイルを受け入れる必要があります。ユーザーがファイルをアップロードして停止ボタンを押すと、手動でプロセスを終了するまで、fastcgiプロセスが停止し、100%で実行されます。長時間実行中のFastcgiプロセスを強制終了する

このようにハングしたプロセスを自動的に強制終了できる設定はありますか?一定の時間実行されているfastcgiプロセスを自動的に強制終了する方法はありますか?

+1

私はあなたがそれがで立ち往生理由を理解する必要があると思いますmod_fastcgiのフォールトまたはあなたのコードであれば100%まずは、それがあなたのコードであれば、どこに行き詰まっているのか、mod_fastcgiの誤りであれば、自分のサイトにバグを開いてください。 – nrathaus

答えて

0

私が興味を持っている機能はmod_fastcgiのオプションではないので、プロセスを強制終了するためにTime :: Outをラップするコードの部分を見つけることができないようです。私は私のハッキングされたttogetherソリューションを共有すると思った。

私はこれを行うために1つのlinuxコマンドを検索しましたが、killallは機能しませんでした(特にそのサーバインスタンスを実行するperlコマンドは見つかりませんでした)。そしてpkillも殺すプロセスの)。

だから私はダンサーmod_fastcgiのサーバインスタンスの正しい名前と年齢との仕事を殺すために、rootで実行される短いperlスクリプトを書いた:

#!/usr/bin/perl -w 

use Proc::ProcessTable; 

$t = new Proc::ProcessTable('cache_ttys' => 1); 

foreach $p (@{$t->table}){ 
    if ($p->cmndline =~ /perl.*dispatch.fcgi/) { 
     my $run_time_min = $p->time/(1000000*60); 
     if ($run_time_min >= 15) { 
      # print "Found this job to kill: ". $p->pid . $p->cmndline."\n". $run_time_min . "\n"; 
      kill 'KILL', $p->pid; 
     } 
    } 
} 
2

いいえ、はサポートされていません。mod_fastcgiです。言っ

は、あなたはいくつかの選択肢を持っている:

  • タイムアウトベースのモジュールであなたのPerlコードなどTime::Outを包みます。
  • ulimit -tを使用すると、CPUクォータが終了するとカーネルに暴走プロセスが強制終了されます。

2番目の解決策は、Apacheのプロセス全体を終了させたくないため、実装するのがやや難しいでしょう。詳細はUnix StackExchange questionで説明します。

+0

Time :: Outモジュールについて聞いたことがなく、アップロードプロセス。 "アップロード"ダンサー機能がぶら下がっている部分ではないように見えるので、それは別のものでなければなりません。 – mbergins

関連する問題