3
我建立一个Rails应用程序(5.0.4,2.3.3红宝石)创建具有大虾一个PDF文件,并将其发送给用户,使用的ActionController的SEND_DATA,就像这样:为什么使用send_data发送的对象似乎被保存在内存中?
# data is a Prawn document
send_data data, type: 'application/pdf', disposition: 'inline', filename: 'document.pdf'
我我们注意到Heroku的应用程序似乎在创建和发送每个文档时使用的内存越来越多。我在本地机器上用一些粗略的测试证实了这一点。现在,我在send_data
调用后放置了GC.start
,问题似乎得到解决。内存总是回到稳定的水平。
我的问题是,send_data
做一些事情来保持对象很长一段时间吗?垃圾收集器是否应该不时地“独立运行”? Heroku显示内存持续增加。谢谢。
谢谢。在没有调用GC.start的情况下运行时,我确实注意到这个进程自己释放了几MB,所以我认为GC是自动执行它的事情,但是,当我打电话时,它似乎没有释放尽可能多的内存它明确。我假设“自动GC”以“光照模式”运行,而不是手动触发每一个未使用的对象。任何进一步澄清/确认这一点再次非常感谢。 – flavio
是的,就它自己而言,它将以“小”模式运行。当你明确地调用它时,它将以“主要”模式运行,这也将是第二代中的GC对象。关于它的大文章在这里:https://www.speedshop.co/2017/03/09/a-guide-to-gc-stat.html。 – Segfault