eri*_*ric 8 ruby ruby-on-rails passenger mod-rails
Unicorn拥有OobGC机架中间件,可用于GC.start在一定数量的请求之后运行.
Phusion Passenger中有类似的东西吗?
Phusion Passenger 4正式引入了带外垃圾收集机制.它通过允许任意工作而不仅仅是垃圾收集,比Unicorn更灵活.http://blog.phusion.nl/2013/01/22/phusion-passenger-4-technology-preview-out-of-band-work/
挂钩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
Run Code Online (Sandbox Code Playgroud)
并在初始化程序中调用它:
if defined?(PhusionPassenger::Rack::RequestHandler)
require 'passenger_oob_gc'
PassengerOobGC.install!(%r{^/admin/}, 3)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |