Ruby on rails Ruby on Rails应用程序的Heroku配置
我已经为Heroku的Ruby on Rails应用程序建立了一个客户机,多年来,由于他们的应用程序运行不好,无论我们在额外资源上花了多少钱,他们的文档都非常混乱。我一直无法理解他们的特定术语和文档。我们不断收到“H12”错误和“R14”错误等。内存使用和动态负载不断增加。然而,这是一个没有大量流量的中小型企业。想知道是否有人了解Heroku的详细信息,可以查看此配置并告诉我它是否有意义:Ruby on rails Ruby on Rails应用程序的Heroku配置,ruby-on-rails,heroku,Ruby On Rails,Heroku,我已经为Heroku的Ruby on Rails应用程序建立了一个客户机,多年来,由于他们的应用程序运行不好,无论我们在额外资源上花了多少钱,他们的文档都非常混乱。我一直无法理解他们的特定术语和文档。我们不断收到“H12”错误和“R14”错误等。内存使用和动态负载不断增加。然而,这是一个没有大量流量的中小型企业。想知道是否有人了解Heroku的详细信息,可以查看此配置并告诉我它是否有意义: DB_POOL: 10 MALLOC_ARENA_MAX: 2 RAILS_MAX_THREADS: 5
DB_POOL: 10
MALLOC_ARENA_MAX: 2
RAILS_MAX_THREADS: 5
WEB_CONCURRENCY: 4
您的
WEB\u并发性
对于您的标准2x dynos来说太高了。建议的默认值为2:
这可能会导致R14错误,因为更高的web并发性意味着更多的内存使用。因此,您需要降低web并发性(这可能意味着您还需要增加dynos的#来补偿),或者需要使用更大的dynos
您已经有MALLOC\u ARENA\u MAX=2
,但不确定是否正在使用jemalloc
。你可能想
当然,你的应用程序中也可能存在其他内存问题-请查看一些提示。我还建议添加一个监视工具,如,它能够处理每个事务
为了缓解H12s:
rack timeout
gem的东西,它确保在dyno级别丢弃长时间运行的请求,从而避免H12错误(您会得到rack::TimeoutError
异常)。将超时设置为15秒,使其远低于H12超时的30秒- 如果瓶颈是外部的:
- 检查外部API限制和节流
- 添加超时,使应用程序能够适应缓慢的外部响应
- 如果瓶颈是由数据库造成的:
- 检查等待连接的#和->如果等待连接的数量在X分钟内始终高于0,则表明您有一些需要调查的长锁。等待连接最容易随时间跟踪(免费计划应该可以)
- 如果瓶颈是其他应用程序代码:
- 添加更多自定义工具以获得更多见解,即
- 解决应用程序代码问题
etc附加组件中已经包含了一些未列出的附加组件,但如果您没有,我将总结我的建议,并介绍一些其他提示:
- 要获取更多指标信息,请确保
- 还启用
- 添加一个可以跟踪Ruby内存分配的监视工具,如。我也可以这样做,但我认为他们的计划能够做到这一点更昂贵(需要Scout Insights功能)
- 添加最低付费版本的。这是我用于事务跟踪的go-to工具。如果您不想为另一个工具付费,AppSignal也可以这样做,但我发现使用New Relic更容易
- 加上。它提供了一些开箱即用的优秀图表,包括在自己的仪表板中的一组Postgres图表
- 在您的监控应用程序中设置警报,以警告您响应时间之类的事情,以便您可以查看它们李>
- 当然,首先在staging中进行所有更改,并在尝试投入生产之前查看更改的影响李>
更新:我还注意到你说你正在使用Standard-0 Postgres,这意味着它有一个。因此,如果你最终降低了WEB_的并发性
并增加了dynos的#,那么请注意你与该数据库的总连接。除了存在限制这一事实之外,更多的连接也意味着数据库的开销更大,因此,如果接近连接限制,则更有可能看到数据库性能受到影响。您可能希望升级到另一个具有更高连接限制的计划,或使用以避免连接限制
Ruby 2.7
Rails 6.0
Puma
8 2x web dynos
5 1x worker dynos
$50 Postgres standard 0 database
$15 Memcachier
$10 Rediscloud
...etc addons