7

Ruby on Rails アプリケーションでガベージ コレクションをアウト オブ バンドで実行しようとしています (リクエストがそのレスポンスの処理を終了したら)。config.ru に以下を追加しました。

# 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

ただし、NewRelic ポータルを見ていると、ほとんどの Web トランザクションは、ガベージ コレクションに平均で少なくとも 110 ~ 150 ミリ秒が費やされていることを示しています。Unicorn::OoobGC は、実際のリクエストの範囲外でそれを行うことになっていますか? そうである場合、これが Web トランザクションに表示されるのはなぜですか? Web 要求のコンテキスト外でガベージ コレクションに費やされる時間を取得して、認識されるクライアントの応答時間を短縮するにはどうすればよいですか? バックグラウンドで実行する必要があるため、消費される CPU 時間は変わりませんが、リクエスト パイプラインを保持するよりもバックグラウンドで実行する方が適切です。

4

1 に答える 1

2

1 つのリクエストで GC をトリガーするのに十分なオブジェクトが割り当てられた場合、ユニコーン ミドルウェアを使用して最終的な GC OOB を移動しても、リクエストに対して報告された gc 時間が引き続き表示されます。

ruby 1.9.3 と REE を使用すると、さまざまな GC ノブをいじって、GC がトリガーされる頻度を制御できます。実行時間の長いサービス アプリでの動作を改善するために RUBY_HEAP_MIN_SLOTS、RUBY_GC_MALLOC_LIMIT、および RUBY_FREE_MIN を設定する例については、Ruby 1.9.3 での GC のチューニングに関するページを参照してください。

于 2012-11-20T00:43:19.310 に答える