2012-11-19 11 views
7

私のRuby on Railsアプリケーションでバンド外からガベージコレクションを実行しようとしています。私はしかし、私のNewRelicポータルで探していますし、ほとんどのWebトランザクションは、少なくとも110-150msは平均やってガベージコレクションに費やされていることを示しているんUnicorn + Rackで帯域外ガベージコレクションが実行されています

# This file is used by Rack-based servers to start the application. 
require ::File.expand_path('../config/environment', __FILE__) 
begin 
    require 'unicorn/oob_gc' 
rescue LoadError, NameError 
end 
# Out-of-band GC, runs GC after every 10th request and after the response 
# has been delivered. 
begin 
    use Unicorn::OobGC, interval=10 
rescue NameError 
end 

run MyApp::Application 

GC.start 

:私は私のconfig.ruに以下を追加しました。 Unicorn :: OoobGCは実際の要求の範囲外でそれを行うことになっていますか?そうであれば、なぜWebトランザクションでこれが表示されますか?ガベージコレクションに費やす時間をウェブリクエストのコンテキスト外で行うために、クライアントの応答時間がより早くなるようにするにはどうすればよいですか? CPU時間はバックグラウンドで発生する必要があるため、依然として同じですが、要求パイプラインを保持するよりもバックグラウンドで優れています。

答えて

2

単一の要求でGCをトリガーするのに十分なオブジェクトが割り当てられた場合、最終的なGC OOBをユニコードミドルウェアで移動したにもかかわらず、依然としてGC時間が報告されます。

ruby​​ 1.9.3とREEを使用すると、さまざまなGCノブを回転させて、GCのトリガー頻度を制御できます。長時間実行されるサービスアプリケーションの動作を改善するために、RUBY_HEAP_MIN_SLOTS、RUBY_GC_MALLOC_LIMIT、およびRUBY_FREE_MINを設定する例については、Tuning the GC in Ruby 1.9.3を参照してください。

関連する問題