Rails コントローラは、その行の 1 つに非常に長い時間がかかる場合に何をしますか? たとえば、行の 1 つは 10000 秒のように非常に長い時間スリープすることを望んでいますsleep(10000)
。多くの人が Web サイトを使用し、このコントローラー メソッドを呼び出すと、大量のリソースが消費されますか?
質問する
367 次
1 に答える
1
数秒間スリープするため10000
、1 つの ruby プロセスがずっとブロックされます。
Web サーバーがこの遅延の前にタイムアウトするように設定されている場合、ブラウザーはエラー メッセージを表示しますが、Rails プロセスは停止しません。
したがって、ここには魔法はありません。
スリープ中はリソースを使用しませんが、Ruby プロセスに必要な RAM は解放されません。そして、このアクションへのリクエストごとに 1 つのプロセスがスタックし、max_nb_ruby_processes_on_your_server
このアクションへのリクエストから並行して開始されるため、Web サイトはすべてのリクエストに対して応答しなくなり、リクエストを処理するための Ruby プロセスが利用できなくなります。
処理するデータが複雑な場合は、通常、rake task
crontab または遅延ジョブを介して非同期に呼び出す を介して処理するのが最善です。
于 2012-11-12T20:09:06.980 に答える