我正在运行一个 RoR 应用程序 no heroku,它会快速占用可用的 512 Mb。我正在使用 puma (4.3.5) .
我已遵循教程此处和本地计算机上的脱轨基准测试。 perf:mem_over_time 和本地基准从未引发任何问题。令人震惊的是,无论如何,本地机器上的内存都不会增加,而当应用程序部署在heroku上时,它会稳步增加。
关于如何在heroku上调试问题有什么想法吗?在 Heroky 上运行脱轨基准是不可能的,因为它抱怨无法连接到 postgres 服务器(用户没有 CONNECT 权限。)
好吧,问题似乎很明显:产品上的工作人员数量设置为 5。一开始,每个工作人员平均占用 80Mb,因此只需稍微增加内存,就会触发 R14 内存不足。我已经将其减少到 2 名工人,现在就可以了。
切换到jemalloc进行内存分配可能会有用。 https://prathamesh.tech/2021/05/23/adding-jemalloc-to-rails-apps-on-heroku/ 也可能有用。
它允许您的 RAM 使用量随着时间的推移在一定程度上回落(通过释放内存)(与默认值不同,默认值只会随着时间的推移而上升)。从而减少 RAM 使用。