为什么升级到Ruby 2.6后平均可用内存插槽会显著增加?

xdyibdwo  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(104)

我最近升级了一个Rails应用程序以使用Ruby 2.6.1,并看到平均空闲内存插槽(由Heroku测量)显着增加。
我找不到任何相关的问题和好奇,如果有人看到这一点或有一个想法,为什么它会发生。更多信息请参见下面的两个图表--第一个是部署Ruby 2.6.1后的总体趋势,第二个是一个更详细的视图,显示了内存插槽减少的重复模式。

更新

为了给予更多的上下文,我添加了一些图表,显示Ruby2.6.1升级前后的内存使用情况和堆对象。两者非常相似,除了在2.6.1升级后释放了更多的对象。一切都运转良好,但我仍然对为什么会发生这种情况感兴趣。
如果这是一个有意的内存优化,我想知道Heroku的/@nateberkopec的Assert“大量的空闲插槽(例如超过300,000)表明有一个控制器动作正在分配大量的对象并释放它们”是否需要在Ruby 2.6中修改。
内存使用:

堆对象:

ma8fv8wu

ma8fv8wu1#

不看你的代码我就说不准。
但是,请注意,在ruby2.6中,垃圾回收发生了变化
我还没有能够找到太多的信息,但我注意到它改变了,因为临时文件被删除在不同的时间比升级前。我测试了很多,似乎导致垃圾收集的触发器/条件发生了变化。
这里有一些我一直在看的链接,但如前所述,那里没有足够的信息:https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-released/
https://rubyreferences.github.io/rubychanges/2.6.html

相关问题