4

私のRailsアプリケーションには、画像のサイズ変更やS3へのアップロードなど、バックグラウンドプロセスにオフロードされる多くのタスクがあります。これらのプロセスを管理するためにdelayed_jobを使用しています。

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

1つの解決策は、バックグラウンドジョブのみを実行する別のサーバーを取得することです。これが最適な解決策だと思いますか?しかし、これはすぐにできることではないので、どういうわけかバックグラウンドジョブをより低いオペレーティングシステムの優先度で実行し、それによってそれらの作業を行う際に消費するCPUサイクルを減らすことができるのではないかと思います。

感謝します。

4

1 に答える 1

7

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

したがって、たとえば、の代わりに:

ruby script/delayed_job -e production -n 2 start

試す:

nice -n 15 ruby script/delayed_job -e production -n 2 start
于 2009-08-27T10:35:32.460 に答える