1

私の Rails アプリでは、ワーカー プロセスを使用して 45,000 のデータベース レコードを 6 時間に 1 回スキャンし、特定の条件が満たされた場合にメールを送信します。これにより、ワーカーが処理しているときにサーバーの CPU/負荷が急増します。その結果、他のサーバー要求のパフォーマンスが低下します。find_in_batch を使って一度に 1000 件のレコードを取得して処理を試みました。しかし、CPU 使用率は依然としてピーク レベルにあります。私が見ることができた大きな違いはありません。これを処理して、CPU 使用率が上限に達しないようにする方法はありますか?

4

2 に答える 2

3

cron とscript/runner. 次の方法でプロセスの優先度を下げてみてくださいnice

nice -n 19 /usr/bin/ruby <path to your app>/script/runner <your script>
于 2011-01-26T21:14:23.197 に答える
0

を使用してプロセスの優先度レベルを調整するのniceも 1 つの方法ですが、別の方法としては、アプリに少しリラックスしてからsleeporselectコマンドを使用するように指示することもできます。

while (doing_stuff)
  do_stuff

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

呼び出しはselect短時間ブロックされ、システム上の他のタスクが自由に実行できるようになります。この値を高く設定すると、ジョブの実行が遅くなりますが、CPU 負荷レベルへの影響は低くなります。

于 2011-01-26T21:17:50.100 に答える