2016-07-14 10 views
0

私はRubyの内部の動作を知っていますから、完了したらプロセスを終了するとメモリを解放します。sidekiqはいつプロセスを終了し、メモリを解放しますか?

私は非常に長い実行中のsidekiq Herokuプロセスをメモリ問題でデバッグしています。バックグラウンドプロセスの境界を突き止めようとしています。

私はsidekiqが3つのスレッドを使用していて、一度に3つのジョブを実行しており、合計100ジョブがあるとします。つまり、仕事の間に決して休憩はないでしょうか?それは、100のジョブがすべて完了するまで、メモリが解放されないことを意味しますか?私ははいと思っています、それは100が完了するまで解放されません。

しかし、私は1スレッドに切り替え、100のジョブはお互いの後に実行されます。それぞれのジョブはそれ自身のプロセスになりますか?あるいは、一度に1つずつ実行されているにもかかわらず、100個のキューに入れられたすべてのジョブを単一のプロセスとして扱いますか?

もしそうなら...それは、それが完了した後にメモリを解放する独自の個々のプロセスである各ジョブを作る方法はありますか?

答えて

1

Rubyはガベージコレクションを使用してメモリを再利用します。あなたが思っているよりもはるかに速くメモリを解放します。また、https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#memory-bloat

+0

ありがとうございました!それは実際には本当に便利なリンクです。しかし、あなたは質問に対する答えを知っていますか?仕事であるという面では、私の前提が正しいかどうか? – andy

+0

ジョブはプロセスではありません。 Sidekiqは、デフォルトでワーカースレッドを25個作成するプロセスです。各スレッドは、すべて同じプロセス内で並行してジョブを実行します。 –

関連する問題