Heroku 错误 R14(超出内存配额):我该如何解决?

Posted

技术标签:

【中文标题】Heroku 错误 R14(超出内存配额):我该如何解决?【英文标题】:Heroku Error R14 (Memory quota exceeded): How do I solve this? 【发布时间】:2012-02-11 02:45:36 【问题描述】:

我在 Heroku 上有一个 Rails 3.1 应用程序。我看到很多这样的错误:

错误 R14(超出内存配额)

通常会显示前面的日志条目:

进程运行 mem=522M(102.1%)

这确实会有所不同,但不会相差太大,并且几乎可以在任何 URL 请求之后发生,因此据我所知,它与特定的控制器操作无关。

这是一个经典的日志条目块:

2012-01-16T02:35:57+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=55ms status=401 bytes=27
2012-01-16T02:35:58+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=155ms status=200 bytes=1
2012-01-16T02:36:02+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=13ms status=401 bytes=27
2012-01-16T02:36:02+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=147ms status=200 bytes=1
2012-01-16T02:36:09+00:00 heroku[router]: POST prizequiz.herokuapp.com/mobile_users dyno=web.1 queue=0 wait=0ms service=87ms status=201 bytes=624
2012-01-16T02:36:11+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/questions dyno=web.1 queue=0 wait=0ms service=5ms status=401 bytes=27
2012-01-16T02:36:11+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/questions dyno=web.1 queue=0 wait=0ms service=290ms status=200 bytes=81412
2012-01-16T02:36:15+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=10ms status=401 bytes=27
2012-01-16T02:36:16+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=67ms status=200 bytes=1
2012-01-16T02:36:33+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=10ms status=401 bytes=27
2012-01-16T02:36:33+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=132ms status=201 bytes=230
2012-01-16T02:36:55+00:00 heroku[web.1]: Process running mem=522M(102.1%)
2012-01-16T02:36:55+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-16T02:37:17+00:00 app[web.1]: 
2012-01-16T02:37:17+00:00 app[web.1]: 
2012-01-16T02:37:17+00:00 app[web.1]: Started POST "/quizzes/1/scores" for 177.53.80.25 at 2012-01-16 02:37:17 +0000
2012-01-16T02:37:17+00:00 app[web.1]: cache: [POST /quizzes/1/scores] invalidate, pass
2012-01-16T02:37:17+00:00 app[web.1]: 
2012-01-16T02:37:17+00:00 app[web.1]: 
2012-01-16T02:37:17+00:00 app[web.1]: Started POST "/quizzes/1/scores" for 177.53.80.25 at 2012-01-16 02:37:17 +0000
2012-01-16T02:37:17+00:00 app[web.1]: cache: [POST /quizzes/1/scores] invalidate, pass
2012-01-16T02:37:17+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=44ms status=201 bytes=230
2012-01-16T02:37:17+00:00 heroku[web.1]: Process running mem=522M(102.1%)
2012-01-16T02:37:17+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-16T02:37:17+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=16ms status=401 bytes=27
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: Started GET "/quizzes/1/scores/current_game" for 177.53.80.25 at 2012-01-16 02:37:20 +0000
2012-01-16T02:37:20+00:00 app[web.1]: cache: [GET /quizzes/1/scores/current_game] miss
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: Started GET "/quizzes/1/scores/current_game" for 177.53.80.25 at 2012-01-16 02:37:20 +0000
2012-01-16T02:37:20+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/scores/current_game dyno=web.1 queue=0 wait=0ms service=8ms status=401 bytes=27
2012-01-16T02:37:20+00:00 app[web.1]: cache: [GET /quizzes/1/scores/current_game] miss
2012-01-16T02:37:20+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/scores/current_game dyno=web.1 queue=0 wait=0ms service=6ms status=401 bytes=27
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: Started POST "/quizzes/1/scores" for 177.53.80.25 at 2012-01-16 02:37:20 +0000
2012-01-16T02:37:20+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=33ms status=401 bytes=27
2012-01-16T02:37:20+00:00 app[web.1]: cache: [POST /quizzes/1/scores] invalidate, pass
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: Started GET "/quizzes/1/scores/current_game" for 177.53.80.25 at 2012-01-16 02:37:20 +0000
2012-01-16T02:37:20+00:00 app[web.1]: 
2012-01-16T02:37:20+00:00 app[web.1]: 

我安装了 New Relic,但无法识别任何有用的东西。

如果需要,我们很乐意提供更多信息。我在 Heroku 上也有一个未解决的支持请求,但到目前为止(标记为紧急 2 天)我还没有回复。

添加 web dynos 没有区别。

更新,我添加了 oink gem,这是一个示例结果

2012-01-26T08:24:25+00:00 app[web.1]: 
2012-01-26T08:24:25+00:00 app[web.1]: 
2012-01-26T08:24:25+00:00 app[web.1]: Started PUT "/mobile_users/1" for 110.49.234.219 at 2012-01-26 08:24:25 +0000
2012-01-26T08:24:26+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:24:26+00:00 app[web.1]: Memory usage: 286276 | PID: 16
2012-01-26T08:24:26+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2
2012-01-26T08:24:26+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:24:26+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:24:26+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=460ms status=200 bytes=1
2012-01-26T08:24:38+00:00 heroku[web.1]: Process running mem=537M(104.9%)
2012-01-26T08:24:38+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:24:43+00:00 app[web.1]: 
2012-01-26T08:24:43+00:00 app[web.1]: 
2012-01-26T08:24:43+00:00 app[web.1]: Started PUT "/mobile_users/1" for 103.1.165.23 at 2012-01-26 08:24:43 +0000
2012-01-26T08:24:43+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=544ms status=401 bytes=27
2012-01-26T08:24:43+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:24:43+00:00 app[web.1]: Memory usage: 288876 | PID: 19
2012-01-26T08:24:43+00:00 app[web.1]: Instantiation Breakdown: Total: 0
2012-01-26T08:24:43+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:24:43+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:24:47+00:00 app[web.1]: 
2012-01-26T08:24:47+00:00 app[web.1]: 
2012-01-26T08:24:47+00:00 app[web.1]: Started PUT "/mobile_users/1" for 103.1.165.23 at 2012-01-26 08:24:47 +0000
2012-01-26T08:24:48+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:24:48+00:00 app[web.1]: Memory usage: 286412 | PID: 16
2012-01-26T08:24:48+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2
2012-01-26T08:24:48+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:24:48+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=432ms status=200 bytes=1
2012-01-26T08:24:48+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:24:59+00:00 heroku[web.1]: Process running mem=537M(104.9%)
2012-01-26T08:24:59+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:25:20+00:00 heroku[web.1]: Process running mem=537M(104.9%)
2012-01-26T08:25:20+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:25:41+00:00 heroku[web.1]: Process running mem=537M(104.9%)
2012-01-26T08:25:41+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:26:32+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=34ms status=401 bytes=27
2012-01-26T08:27:04+00:00 app[web.1]: 
2012-01-26T08:27:04+00:00 app[web.1]: 
2012-01-26T08:27:04+00:00 app[web.1]: Started PUT "/mobile_users/1" for 103.1.165.23 at 2012-01-26 08:27:04 +0000
2012-01-26T08:27:04+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:27:04+00:00 app[web.1]: Memory usage: 288876 | PID: 19
2012-01-26T08:27:04+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2
2012-01-26T08:27:04+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:27:04+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:27:04+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=337ms status=200 bytes=1
2012-01-26T08:27:05+00:00 heroku[web.1]: Process running mem=537M(104.9%)
2012-01-26T08:27:05+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:27:26+00:00 heroku[web.1]: Process running mem=537M(104.9%)
2012-01-26T08:27:26+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:27:48+00:00 heroku[web.1]: Process running mem=537M(104.9%)
2012-01-26T08:27:48+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:28:08+00:00 heroku[web.1]: Process running mem=537M(105.0%)
2012-01-26T08:28:08+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:28:29+00:00 heroku[web.1]: Process running mem=537M(105.0%)
2012-01-26T08:28:29+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:28:51+00:00 heroku[web.1]: Process running mem=537M(105.0%)
2012-01-26T08:28:51+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:29:08+00:00 app[web.1]: 
2012-01-26T08:29:08+00:00 app[web.1]: 
2012-01-26T08:29:08+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:08 +0000
2012-01-26T08:29:08+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:29:08+00:00 app[web.1]: Memory usage: 382404 | PID: 13
2012-01-26T08:29:08+00:00 app[web.1]: Instantiation Breakdown: Total: 0
2012-01-26T08:29:08+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:29:08+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:29:08+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=86ms status=401 bytes=27
2012-01-26T08:29:09+00:00 app[web.1]: 
2012-01-26T08:29:09+00:00 app[web.1]: 
2012-01-26T08:29:09+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:09 +0000
2012-01-26T08:29:09+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:29:09+00:00 app[web.1]: Memory usage: 382404 | PID: 13
2012-01-26T08:29:09+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2
2012-01-26T08:29:09+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:29:09+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:29:09+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=160ms status=200 bytes=1
2012-01-26T08:29:11+00:00 app[web.1]: 
2012-01-26T08:29:11+00:00 app[web.1]: 
2012-01-26T08:29:11+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:11 +0000
2012-01-26T08:29:11+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=101ms status=401 bytes=27
2012-01-26T08:29:11+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:29:11+00:00 app[web.1]: Memory usage: 382404 | PID: 13
2012-01-26T08:29:11+00:00 app[web.1]: Instantiation Breakdown: Total: 0
2012-01-26T08:29:11+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:29:11+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:29:12+00:00 app[web.1]: 
2012-01-26T08:29:12+00:00 app[web.1]: 
2012-01-26T08:29:12+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:12 +0000
2012-01-26T08:29:12+00:00 heroku[web.1]: Process running mem=537M(105.0%)
2012-01-26T08:29:12+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-01-26T08:29:12+00:00 app[web.1]: Oink Action: mobile_users#update
2012-01-26T08:29:12+00:00 app[web.1]: Memory usage: 288876 | PID: 19
2012-01-26T08:29:12+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2
2012-01-26T08:29:12+00:00 app[web.1]: Oink Log Entry Complete
2012-01-26T08:29:12+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass
2012-01-26T08:29:12+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=169ms status=200 bytes=1
2012-01-26T08:29:33+00:00 heroku[web.1]: Process running mem=537M(105.0%)
2012-01-26T08:29:33+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)

我不知道这能证明什么,只是我似乎没有像 Heroku 认为的那样使用那么多内存 内存使用:288876 vs Process running mem=537M(105.0%)

【问题讨论】:

这种情况发生在每个请求上还是仅在几个请求之后(即您只是使用了太多内存还是内存泄漏)? 从日志条目判断(上面发布)似乎不是每个请求 您是否在频繁加载的模型中使用任何序列化属性? 如果你有一个序列化的属性,那么在加载对象时它总是会被反序列化当前可用的 ruby​​ 1.9.2 版本中存在一个错误,这意味着如果你是 YAML.load 泄漏内存使用心理引擎。巧合的是,几天前我在博客上写过这个:spacevatican.org/2012/1/26/memory-leak-in-yaml-on-ruby-1-9-2 对于其他发现此问题的人,@FrederickCheung 的评论应该持保留态度。 YAML 的 Psych 引擎会泄漏内存(或至少会泄漏)。然而,Heroku 并没有在他们的 ruby​​ 构建中包含 Psych,所以你回退到使用 Sych。我跑下来并与 Heorku 确认。不,我仍然没有找到我的内存泄漏的来源。 【参考方案1】:

查找带有'Model.all.each do |something|' 的代码并替换为Model.find_each do |something|。这将通过将模型的块而不是整个模型一次加载到内存中来节省内存。

另外,寻找机会使用in_groups_of:limit 来减少一次保存在内存中的对象数量。

编辑:for_each -> find_each。

【讨论】:

【参考方案2】:

我遇到了这个问题 .. 使用 find_in_batches 解决。

如果有人仍然有这个错误,我会把代码放在这里。 由于运行需要很长时间,我找到了一个可以帮助用户的 progress_bar gem。也会让它在这里,因为我认为它几乎在所有情况下都是强制性的。

bar = ProgressBar.new( total )
Texto.find_in_batches(:batch_size => 100) do |textos|
    textos.each| texto | 
        ...do_stuff...
    
    bar.increment! textos.size
end

进度条: https://github.com/paul/progress_bar/issues

【讨论】:

我能问一下这个回答具体帮助你解决了什么问题吗?我遇到了一个非常相似的问题,我的应用程序中没有很多地方可以让 find_in_batches 产生任何影响...... find_in_batches 会覆盖您打算应用的任何顺序(使用 order(:id) 代替),因此在您想以特定顺序迭代结果的情况下,这将不起作用。【参考方案3】:

Heroku 在其Acceptable Use Policy 中指定每个测功机的 RAM 限制。

您可以使用memprof,特别是Memprof::Middleware,来帮助找出在请求期间分配应用中所有内存的原因。这实际上只适合在非生产环境中使用,因为它会降低您的应用速度。

Rails 应用程序分配许多 ActiveRecord 对象是很常见的,因此您可能会寻找您正在执行Model.find(:all).select... 的地方,或从数据库中提取大量记录然后在 Ruby 中处理它们的类似查询。最好使用where 来限制使用 SQL 返回到 Rails 应用程序的内容。

【讨论】:

谢谢,我会将数据库拉到我的开发箱中并查看 memprof。不会在 ruby​​ 中读取所有数据并进行处理,这会增加 SomeModel.where(:some_condition).includes(:children) 请求的巨大处理开销(从数据检索的角度来看,这与我的应用程序所获得的重量差不多)或我误会了吗? 嗯! memprof 不支持 Ruby 1.9x,所以这不是一个真正的选择,不过感谢您的提示 你可以在你的本地机器上安装 1.8.7(使用rvm)只是为了测试。可能是值得的,因为即使使用不同的解释器,您的记忆使用仍然可能是病态的。我会编辑我的回复——我的意思是说在 Ruby 中使用 where 比使用 select 更好。【参考方案4】:

此外,WEB_CONCURRENCY heroku 配置可能会导致此问题。例如,我有一个运行 2 1x dynos 的应用程序。如果我使用 sensible_defaults(另一个 heroku 配置),它会将 WEB_CONCURRENCY 默认为 2(基于我的测功机)。这会导致我的日志中出现大量 R14 错误。如果我关闭 sensible_defaults,并设置 WEB_CONCURRENCY=1 ......问题就消失了。

如果您没有设置 WEB_CONCURRENCY,并且您没有使用 sensible_defaults,并且您遵循通过 heroku 文档设置的服务器(我使用 Puma)...您可能会在 puma.rb 中有一行看起来像这样:

workers Integer(ENV['WEB_CONCURRENCY'] || 3)  

如果是这样,那么 WEB_CONCURRENCY 没有设置...所以它将是 3,这会使用更多的内存。

在控制台中:

// 查看现有的配置设置。

heroku 配置

// 如果启用了 sensible_defaults。

heroku 配置:设置 sensible_defaults=disabled

// 设置WEB_CONCURRENCY

heroku 配置:设置 WEB_CONCURRENCY=1

// 监控 R14 错误日志。

【讨论】:

谢谢,就我而言,我使用的是 Unicorn,是的,禁用 sensible_defaults 并将 WEB_CONCURRENCY 设置为 1 就可以了,谢谢 这看起来也为我们修复了。再次感谢。【参考方案5】:

我使用的是 Mongoid,在我的情况下,它来自在非 Web 请求过程中启用的“身份映射”(因此身份映射从未被清除并不断增长)。在该过程中设置Mongoid.identity_map_enabled = false 解决了这个问题。

【讨论】:

谢谢布赖恩。这非常有用。它打开 Mongoid 写道:It is important to note that you should never be using the identity map when executing background jobs, rake tasks, etc. unless you really know that not many documents will be loaded and memory consumption will be low. Otherwise it's a server takedown waiting to happen. In these cases it's best to wrap your task or job in a unit of work. mongoid.org/en/mongoid/v3/identity_map.html【参考方案6】:

也试试这个

heroku ps

我有 2 个控制台进程已经运行了将近 24 小时。我在控制台中有一些重要的事情需要做,谁知道发生了什么。我在控制台中所做的对数据库进行了大量的写入和读取操作,持续了 10 多分钟。所以这一定是搞砸了。

在你的终端中运行 heroku ps 会显示你所有的进程,你可能会得到一个“啊哈”。

杀死僵尸进程
heroku ps:stop run.6654

不要忘记“跑步”。部分

执行 heroku ps 以确认它们已消失并检查您的日志以确保问题已解决。

【讨论】:

我不像你那样运行控制台。但不知何故,你的命令救了我,谢谢。我仍然不知道为什么这个命令解决了我的内存问题。你能告诉我run.6654是什么意思吗?【参考方案7】:

在尝试使用 oink gem 进行调试时,我遇到了同样的问题并升级到了他们的 2x dynos 作为权宜之计。在heroku restart 之后,将测功机加倍的配置更改不起作用 也没有将它们带到 0 并备份。在添加 oink gem 后执行git push 可以升级工作,并且 oink 没有显示与 heroku 日志最初显示的相同的消耗。

【讨论】:

【参考方案8】:

对我来说,用 MiniMagick 替换 RMagick 就可以了。两种宝石都具有相同的调整大小和裁剪功能(我使用carrierwave进行图像上传)

    Gemfile 更新

    删除gem 'rmagick'

    并添加gem 'mini_magick'

    运行bundle

    更新载波上传器

    替换include CarrierWave::RMagick

    include CarrierWave::MiniMagick

    部署到 Heroku,就是这样!

--

最后,每次请求后我都没有 R14 错误。

【讨论】:

以上是关于Heroku 错误 R14(超出内存配额):我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的 Rails 4 错误 R14(超出内存配额)

芹菜节拍进程在启动时分配大量内存

使用 SKLearn 在 Django 项目中大大超出 Heroku 内存配额

Spark GC Overhead limit超出错误消息

Firebase Cloud Functions 部署错误 - 超出配额

将视频上传到 YouTube - 超出配额错误