[英]Heroku configuration for Ruby on Rails application
我使用 Heroku 为他们的 Ruby on Rails 应用程序设置了一个客户端,多年来遇到了很多麻烦,他们的应用程序运行不佳,无论我们在额外资源上花了多少钱,发现他们的文档非常混乱。 我一直无法理解他们的特定术语和文档。 我们不断收到“H12”错误和“R14”错误等。内存使用量和动态负载不断增加。 然而,这是一家没有大量流量的中小型企业。 想知道是否有人了解 Heroku 的来龙去脉,可以查看此配置并告诉我它是否有意义:
DB_POOL: 10
MALLOC_ARENA_MAX: 2
RAILS_MAX_THREADS: 5
WEB_CONCURRENCY: 4
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
您的WEB_CONCURRENCY
对您的 Standard-2x WEB_CONCURRENCY
来说太高了。 推荐的默认值为 2: https : //devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#recommended-default-puma-process-and-thread-configuration
这可能会导致您的 R14 错误,因为更高的 Web 并发意味着更多的内存使用。 因此,您需要降低 Web 并发性(这可能意味着您还需要增加 dynos 的数量以进行补偿),或者您需要使用更大的 dynos。
您已经有MALLOC_ARENA_MAX=2
但不确定您是否正在使用jemalloc
。 您可能也想尝试一下。
当然,您的应用程序中可能还有其他内存问题 - 请在此处查看一些提示。 我还建议添加一个像AppSignal这样的监控工具,因为它能够跟踪每个事务的内存分配。
为了减轻 H12:
rack-timeout
gem 的东西,它确保长时间运行的请求在 dyno 级别被丢弃,从而避免 H12 错误(你会得到一个Rack::TimeoutError
异常)。 将超时设置为 15 秒,使其远低于 H12 超时的 30 秒。我想强调监控工具在帮助诊断问题和帮助确定最佳资源使用方面的重要性。 如果没有适当的监控工具,几乎不可能确定正确的并发配置、正确的大小和要运行的 dynos 数量。 希望您的etc add-ons
已经涵盖了一些未列出的内容,但如果您没有,我将总结我的建议并提及一些其他提示:
log-runtime-metrics
更新:我也刚刚注意到您说您使用的是 Standard-0 Postgres,这意味着它有120 个连接限制。 因此,如果您最终降低了WEB_CONCURRENCY
并增加了WEB_CONCURRENCY
数量,请注意与该数据库的总连接数。 除了存在限制这一事实之外,更多的连接也意味着更多的数据库开销,因此如果您接近连接限制,您更有可能看到数据库性能受到影响。 您可能希望升级到另一个具有更高连接限制的计划或使用pgbouncer
作为您的连接池以避免连接限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.