Ruby on rails H12错误触发Heroku上内存的螺旋式下降
我已经调试了几个星期,但几乎没有成功,所以我想知道是否有人有更多的运气,这可能会在将来极大地帮助其他人解决同样的问题 我们的设置:Ruby on rails H12错误触发Heroku上内存的螺旋式下降,ruby-on-rails,heroku,puma,Ruby On Rails,Heroku,Puma,我已经调试了几个星期,但几乎没有成功,所以我想知道是否有人有更多的运气,这可能会在将来极大地帮助其他人解决同样的问题 我们的设置: Ruby 2.3.7 Rails 4.0.12 彪马3.11.4 机架超时0.4.2 Heroku 2X dynos 每隔一段时间,其中一个dynos就会被一波H12错误击中()。当这种情况发生时,内存会逐渐升级,使dyno无法使用,直到重新启动 即使H12错误消失,内存仍在不断升级: 我们的机架超时设置为30秒后超时请求。这是原因/促成因素,尽管我无法决定
- Ruby 2.3.7
- Rails 4.0.12
- 彪马3.11.4
- 机架超时0.4.2
- Heroku 2X dynos
机架超时设置为30秒后超时请求。这是原因/促成因素,尽管我无法决定性地证明这一点。IO块期间的超时也是一个问题
我很高兴能提供更多的信息,从NewRelic或文书线索,如果你们看到这之前,并知道要寻找什么。谢谢你的建议 看到H12错误表明Heroku在机架超时超时超时请求之前正在超时请求。您需要将机架超时设置减少到30秒以下。我推荐25秒左右
有了这个更改,您应该开始看到Rack::Timeout异常而不是H12错误,并且您可以通过查看异常跟踪器中的堆栈跟踪来开始诊断超时的根本原因
在您确定超时的原因之前,我不会费心调查内存问题。我打赌,一旦您知道请求超时的原因并解决了,您的内存问题也会得到解决。我也遇到过同样的问题,我的第三方服务需要30秒以上,但Heroku不允许超过30秒的超时。因此,如果你的服务需要超过30秒,最好使用无耻插头,但这可能会减轻DyNO上的一些压力:考虑使用Ruby MRI。在命令行(Procfile)中,使用-www public
参数添加静态文件支持(释放Ruby应用程序的压力),并设置-w
(workers)和-t
(threads)以满足您的需要。它是用C编写的,将一些功能移到了RubyGil之外,比如静态文件服务。这将提高服务器端性能。。。虽然我认为你正在经历的内存“泄漏”可能在应用程序中。谢谢你,亚当。好主意,我先试试。