Rails 3.0.7、REE1.8.7を使用します。
応答がブラウザーに送信された後、Railsでコード(具体的にはガベージコレクション)を実行したいと思います。
応答がコントローラーからブラウザーに送信された直後にGC.startを呼び出すことができるように、Rails / Rack /何かにパッチを適用する方法はありますか?
*注:これは、delayed_jobまたはresqueを使用したい状況ではありません。私はこれらのツールをすでに知っており、このユースケースには適していません。*
Rails 3.0.7、REE1.8.7を使用します。
応答がブラウザーに送信された後、Railsでコード(具体的にはガベージコレクション)を実行したいと思います。
応答がコントローラーからブラウザーに送信された直後にGC.startを呼び出すことができるように、Rails / Rack /何かにパッチを適用する方法はありますか?
*注:これは、delayed_jobまたはresqueを使用したい状況ではありません。私はこれらのツールをすでに知っており、このユースケースには適していません。*
乗客へのこの1行のパッチを使用すると、リクエスト間でGCを実行できます。それを実装した後、GCの実行時間(NewRelicによって報告された)が約40%減少したことがわかりました。個々の結果は異なる場合があります。:)
この投稿に感謝します。
Merbでこれを行うことはできますが、Rails自体ではそれを行うことができません。必要なのがガベージコレクターを呼び出すことだけである場合は、要求が完了したら新しいスレッドを開始し、GCを呼び出します。このようにして、ユーザーへの応答を遅らせず、必要なものを取得できます。
Thread.new do
GC.start
end
本当にこれを行う必要がある場合は、おそらく2つのことを考える必要があります。オブジェクトの作成を減らすか、ガベージコレクターの実行がはるかに優れているJRubyで実行することです。