5

使用 Rails 3.0.7、REE 1.8.7。

在将响应发送到浏览器后,我想在 Rails 中运行代码(特别是垃圾收集)。

有没有办法修补 Rails/Rack/something 以便在控制器将响应发送到浏览器后立即调用 GC.start ?

*注意:这不是我想使用delayed_job 或resque 的情况。我已经知道这些工具,它们不适合这个用例。*

4

2 回答 2

1

乘客的这一行补丁允许您在请求之间运行 GC。实施后,我们看到我们的 GC 执行时间(由 NewRelic 报告)下降了大约 40%。个别结果可能会有所不同。:)

感谢这篇文章

于 2012-06-12T16:03:45.137 回答
0

您可以在 Merb 中执行此操作,但 Rails 本身不允许您执行此操作。如果您只需要调用垃圾收集器,只需在请求完成后启动一个新线程并调用 GC。这样您就不会延迟对用户的响应并得到您想要的。

Thread.new do 
  GC.start
end

如果您真的需要这样做,您可能应该考虑两件事,创建更少的对象或在运行更好的垃圾收集器的JRuby上运行。

于 2012-06-07T22:05:37.353 回答