随着 5 月 1 日 Heroku-18 堆栈的弃用,我需要将一个非常旧的 Rails 应用程序更新到所需的最低版本。虽然是这样,但我成功了。
我有一个全新的版本即将部署基于rails 6,但目前,我需要运行这个旧应用程序。我注意到内存占用几乎翻了一番(在 3.2 上,平均为 512mb ram 的 90-120%),我的直接权宜解决方案是将测功机更新为
2x 1gb ram
,但是,我想查明问题所在。
2023-05-01T17:46:12.209506+00:00 heroku[web.1]: Process running mem=990M(188.0%)
2023-05-01T17:46:12.211046+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2023-05-01T17:46:33.107262+00:00 heroku[web.1]: Process running mem=990M(188.0%)
2023-05-01T17:46:33.111875+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2023-05-01T17:46:54.224029+00:00 heroku[web.1]: Process running mem=990M(188.0%)
2023-05-01T17:46:54.227886+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2023-05-01T17:47:15.327098+00:00 heroku[web.1]: Process running mem=990M(188.0%)
2023-05-01T17:47:15.328612+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2023-05-01T17:47:36.150757+00:00 heroku[web.1]: Process running mem=990M(188.0%)
2023-05-01T17:47:36.152131+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2023-05-01T17:47:57.287322+00:00 heroku[web.1]: Process running mem=990M(188.0%)
2023-05-01T17:47:57.289241+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
旧应用程序使用memcachd,新应用程序使用内存缓存,这肯定是问题之一。我可以切换到基于文件的缓存吗?我应该考虑 Redis 缓存还是其他我没有考虑过的解决方案?
这个应用程序也使用 Unicorn,我所有的新应用程序都使用 Puma。这值得研究吗?
这是一个老问题,但可能仍会让新用户暂时受益。
这里有两个解决方案:
但是,需要注意的是,在heroku-20不再可用(2025年4月)之后,我认为Rails 4.2仍然无法部署在heroku上。 https://devcenter.heroku.com/articles/heroku-20-stack