2012-07-06 38 views
2

在我的rails应用程序中,每个请求的总体对象都在增加。 GC运行后,对象不能释放。我正在使用Rails 3.2.3和Ruby 1.9.3。Rails应用程序没有释放内存?

有人能指引我正确的方向吗?从哪儿开始?

有什么可用的工具?

我试过的工具。 ObjectSpace没有引用这些对象创建的行。 Memprof没有使用红宝石1.9.3。 Oink不引用这些对象创建的行。

+3

Ruby和其他好的GC一样,希望尽量减少动态内存分配和释放。这意味着Ruby将分配大量内存一次,并为新对象保留这些内存,这样就不必有更多的上下文切换或动态分配。 Ruby只会在内存不足时释放内存。 – Linuxios 2012-07-06 13:49:25

+1

也许这个评论应该是一个答案? – robbrit 2012-07-06 14:48:37

+0

@krunalshah你怎么知道GC运行相应的resquest /响应循环perhap GC只有在内存达到阈值以上时才会运行,除非你在代码中使用'GC.start'调用'GC',这太糟糕了 – Viren 2012-07-09 03:12:08

回答

0

perftools.rb就不能不提什么方法创建多少个对象的能力:

CPUPROFILE_OBJECTS = 1次

档案的对象分配,而不是CPU /挂钟时间。每个样本 代表在该函数内创建的一个对象。

但是,这是分析所有对象,而不仅仅是垃圾回收对象。另外,在我的一些时间,它segfaults