8

Unicornには、特定の数のリクエストの後に実行するために使用できるOobGCラックミドルウェアがあります。GC.start

Phusion Passengerにも同様のことがありますか?

4

3 に答える 3

5

Phusion Passenger 4は、帯域外のガベージコレクションメカニズムを正式に導入しています。ガベージコレクションだけでなく、任意の作業を許可することで、Unicornよりも柔軟性があります。http://blog.phusion.nl/2013/01/22/phusion-passenger-4-technology-preview-out-of-band-work/

于 2013-05-05T22:59:08.080 に答える
3

PhusionPassenger::Rack::RequestHandler#process_request()私が見つけた唯一のメカニズムはフックインです。

Unicorn OobGCと同様の方法でこれを行うには、次のモジュールを使用できます。

module PassengerOobGC
  def self.install!(path, interval = 5)
    self.const_set :OOBGC_PATH,     path
    self.const_set :OOBGC_INTERVAL, interval
    @@oob_nr = interval
    PhusionPassenger::Rack::RequestHandler.send :include, self
  end

  def self.included(base)
    base.send :alias_method_chain, :process_request, :gc
  end

  def process_request_with_gc(env, *args)
    process_request_without_gc(env, *args)

    if OOBGC_PATH =~ env["PATH_INFO"] && ((@@oob_nr -= 1) <= 0)
      @@oob_nr = OOBGC_INTERVAL
      GC.start
    end
  end
end

イニシャライザで次のコマンドを使用して呼び出します。

if defined?(PhusionPassenger::Rack::RequestHandler)
  require 'passenger_oob_gc'
  PassengerOobGC.install!(%r{^/admin/}, 3)
end
于 2011-09-12T18:47:44.053 に答える
2

Passengerにパッチを適用する必要があります。各リクエストが渡されたGC.start後に実行すると、クライアントリクエストの保持中にガベージコレクションが発生することはありません。これは、平均リクエスト時間を短縮しようとしている場合に検討できる1行の変更です。

lib / phusion_passenger / abstract_request_handler.rbで、適切な間隔で最後に呼び出しにパッチaccept_and_process_next_requestを適用して追加します。GC.start

例については、このコミットを参照してください(ありがとう、@ raphaelcm)。

于 2011-09-08T16:35:00.737 に答える