gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:36 26 4
gpt4 key购买 nike

我正在构建一个 Rails 应用程序(5.0.4,Ruby 2.3.3),它使用 Prawn 创建一个 PDF 文件,并使用 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 显示出稳定的内存增长。谢谢你。

最佳答案

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

关于ruby-on-rails - 为什么使用 send_data 发送的对象似乎保留在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45383661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com