Ruby on rails Ruby on Rails应用程序的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

我已经为Heroku的Ruby on Rails应用程序建立了一个客户机,多年来,由于他们的应用程序运行不好,无论我们在额外资源上花了多少钱,他们的文档都非常混乱。我一直无法理解他们的特定术语和文档。我们不断收到“H12”错误和“R14”错误等。内存使用和动态负载不断增加。然而,这是一个没有大量流量的中小型企业。想知道是否有人了解Heroku的详细信息,可以查看此配置并告诉我它是否有意义:

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,则表明您有一些需要调查的长锁。等待连接最容易随时间跟踪(免费计划应该可以)
    • 如果瓶颈是其他应用程序代码:
      • 添加更多自定义工具以获得更多见解,即
      • 解决应用程序代码问题
    我想强调监控工具的重要性,以帮助诊断问题和确定最佳资源利用率。如果没有合适的监控工具,要想实现正确的并发配置、正确的大小和要运行的dynos几乎是不可能的。希望您的
    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