为什么使用send_data发送的对象似乎保留在内存中?

时间:2017-07-28 23:19:32

标签: ruby-on-rails ruby

我正在构建一个使用Prawn创建PDF文件的Rails应用程序(5.0.4,Ruby 2.3.3),并使用ActionController的send_data将其发送给用户,如下所示:

 # data is a Prawn document    
 send_data data, type: 'application/pdf', disposition: 'inline', filename: 'document.pdf'

我注意到在Heroku上,应用程序似乎在创建和发送的每个文档中使用越来越多的内存。我在本地机器上用一些原油测试证实了这一点。现在,我在GC.start电话后放置了send_data,问题似乎得到了解决。记忆总是回到稳定的水平。

我的问题是send_data做了什么来保持对象长时间存在?并不是垃圾收集器不应该“不断”自行运行? Heroku表现出稳定的内存增长。谢谢。

1 个答案:

答案 0 :(得分:2)

GC仅在系统处于某种内存压力下时运行,特别是在heap_free_slots耗尽时。您可以查看GC.stat有多少可用。由于您通常不会为已用完的内存付费,因此尝试过早释放空间并没有什么意义。然后,在垃圾收集器的最少调用中可以回收最多的空间。