Railsでは、サーバーのパフォーマンスに影響を与えることなくワークリングを使用して45kのデータベースレコードを処理します

StackOverflow https://stackoverflow.com/questions/4810060

質問

私のRailsアプリでは、ワーカープロセスを使用して、6時間に1回45Kデータベースレコードをスキャンし、特定の条件が満たされている場合はメールを送信します。これにより、ワーカーが処理されているときにサーバーCPU/ロードがスパイクされます。その結果、他のサーバーリクエストがパフォーマンスをヒットします。 Find_in_Batchを使用して、一度に1000のレコードを取得して処理を行いました。しかし、CPUの使用率はまだピークレベルにあります。私が見ることができた大きな違いはありませんでした。これを処理する方法はありますか?CPU使用率は最大制限に達しませんか?

役に立ちましたか?

解決

プロセスの優先度レベルを使用していじります nice それを行う方法の1つですが、もう1つはアプリに今すぐリラックスするように指示することです。 sleep また select 指図:

while (doing_stuff)
  do_stuff

  # Take a break for 0.2 seconds
  select(nil, nil, nil, 0.2)
end

select コールは短時間ブロックされ、システム上の他のタスクが自由に実行されます。この値を設定するほど、仕事は遅くなりますが、CPU負荷レベルへの影響は低くなります。

他のヒント

私はあなたがCronを介して仕事を呼び出していると思います script/runner. 。プロセスの優先順位を下げてみることができます nice:

nice -n 19 /usr/bin/ruby <path to your app>/script/runner <your script>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top