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 時間は変わりませんが、リクエスト パイプラインを保持するよりもバックグラウンドで実行する方が適切です。