为什么我的中间件会泄漏内存?

时间:2012-05-13 08:37:28

标签: ruby-on-rails ruby multithreading memory-leaks rack

我已经分配了rack-timeout gem所以我可以添加一些功能 - 即捕获超时事件,记录它们并发送503。

Here's my fork

Here's the Rack app/middleware in my fork

行为符合预期。但是,自部署以来,我的应用程序的内存占用增长并稳步增长,直到我必须重新启动它。虽然它正在增长,但它的行为是正确的,其表现看似正常。

当我第一次注意到这一点时,我认为可能是因为在请求确实消失的情况下,一些线程/内存不停地徘徊。这一系列的实验产生了this patch。实际上,在我的本地测试中,如果没有这个补丁内存,当应用程序被(有意)超时请求命中时,内存会稳定增长,并且补丁内存保持低位且正常。

所以,我以为我解决了这个问题。但我没有 - 我的生产应用程序的内存仍在不断增长。 (我还没有尝试在生产模式下本地测试我的应用程序 - 我接下来会这样做。)

什么可能导致我的Rack应用程序中的内存泄漏?

1 个答案:

答案 0 :(得分:0)

你的Timeout类中有一个lambda,它是一个闭包。由于不需要它,我只想定义一个方法。不确定这是否是原因,但它肯定是内存泄漏的可能原因。