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