11

私は乗客を使用してソフトウェアを提供しています。それは多くのルビープロセスを生み出します。

時々これらのルビーの1つが肥大化し、私はそれを死なせたいです。

私はその意図に神を使うことを望んでいました。私の考えは、これらすべてのルビーを監視することでした。3サイクルで500 MBを超えるメモリを消費している場合、神はそれを優雅に殺そうとする必要があります。それが5分以上生き続けているなら、神はそれを優雅に殺すべきではありません。

神はいつもサービスを再び実行しようとしているように私には思えます、それでそれは私たちに開始コマンドを提供することを強制します。神を使って悪い行動をしたプロセスを殺し、必要に応じて乗客のスポナーにそれらを生き返らせることは可能ですか?

4

2 に答える 2

4

あなたの質問への答えは質問そのものにあります。githubの人によるrubyプロセスプロセスモニターフレームワークであるgodgem使用してrubyプロセスを強制終了できます。

基本的に、これがどのように機能するかです:

  1. プロセスを監視するようにgodを構成します。これは、apache、passenger、mongrel、または長時間実行されるタスクを実行する単純なファイルなど、何でもかまいません。
  2. 神が事前定義されたコードを実行することに基づいて、神の構成ファイルに条件を設定します。

これは簡単な例です(ドキュメントから引用)。これを、メモリ使用量を監視したい、不明確に実行されるファイルの長時間実行プロセスと見なし、それを呼び出しましょうsimple.rb

loop do
  puts 'Hello'
  sleep 1
end

ここで、gemをインストールし、godスーパーユーザーとして実行するように構成して、プロセスを強制終了/生成し、次に構成ファイルを作成できるようにします。例(これもドキュメントから取得):

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive(:memory_max => 500.megabytes)
end

ここで、プロセスのメモリ使用量が500メガバイトを超えるかどうかを知っているかもしれないので、神はそれを再起動します。godgemを使用したプロセス管理を開始する場合に役立つ可能性のあるリソースは、次のとおりです。

さて、あなたが創造的になり、あらゆる種類のことをすることができるように、すべての構成は実際には合法的なルビーコードであることを覚えておいてください。god

最後に、長時間実行プロセスを頻繁に実行している場合は、JVMとLOTがMRIよりも高速であるため、長時間実行プロセスではるかにうまく機能するJRubyを試してみることをお勧めします。

于 2012-06-15T21:49:02.427 に答える
2

私は多くのプロジェクトで同じセットアップを使用しており、同じメモリリークの問題がありました。監視をいじった後、私たちはそれに取り組むために乗客の機能を使用することにしました。具体的には、PassengerMaxRequests 300その数のリクエストを処理したときにインスタンスをシャットダウンする設定(例)を許可します。

使用する場合は、最大リクエスト数の設定よりも優先されるため、必ずPassengerMinInstances0に設定してください。

于 2012-06-16T16:01:51.910 に答える