我正在尝试在我的 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 请求的上下文之外,以便感知的客户端响应时间更快?花费的 CPU 时间仍然是相同的,因为它需要在后台发生,但是,在后台比保持请求管道更好。