2009-08-27 8 views
2

My Railsアプリケーションには、画像のサイズ変更やS3へのアップロードなどのバックグラウンドプロセスに負荷がかかる多数のタスクがあります。私はdelayed_jobを使ってこれらのプロセスを管理しています。delayed_jobバックグラウンドジョブが1台のサーバーで多すぎるCPUを消費するのを防ぐ

これらのプロセス、特にGhostscriptを使用したPDFのサムネイルとImageMagickを使用したイメージのサイズ変更は、CPUを大量に消費し、CPU時間を100%消費することがあります。これらのジョブは、Webアプリケーション自体と同じ(RedHat Linux)サーバー上で実行されているため、DBもWebアプリケーションが応答しなくなる可能性があります。

解決策の1つは、バックグラウンドジョブのみを実行する別のサーバーを取得することです。私はこれが最適な解決策だろうと思いますか?しかし、これは即座にできることではないので、何らかの理由でバックグラウンドジョブをより低いオペレーティングシステムの優先順位で実行させることが可能かどうか、またCPUサイクルを消費することができるかどうかは疑問です。

感謝しています。

答えて

5

私が間違っていない場合、delayed_jobはすべてのバックグラウンドジョブを処理するワーカープロセスを使用します。起動時にOSのスケジューリング優先度を変更することは簡単に可能です。

ので、代わりの、例えば:

ruby script/delayed_job -e production -n 2 start 

試してみてください。

nice -n 15 ruby script/delayed_job -e production -n 2 start 
+0

ボーナスポイント誰もがカピストラーノ/ wのdelayed_job_argsを使用して、これを把握することができます。 –

+0

これは 'delayed_job_args'を使用していませんが、これでジョブが完了します:http://stackoverflow.com/a/9928720/359957 –

関連する問題