gpt4 book ai didi

ruby-on-rails - Rails 4 - 如何优化我的 Heroku 生产环境?

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:51 25 4
gpt4 key购买 nike

如何提高我的 Rails 应用程序性能并最大限度地使用分配的 heroku 资源?例如,一半的内存未使用。

我应该增加工作进程并减少超时限制吗?在网站流量小幅增加后,H12 和 H18 错误有所增加。

我什么时候应该购买 Heroku worker?会减少H18和H12错误吗?

请分享您的见解以微调事物以提高性能并减少错误。

我最近才开始学习rails。抱歉,如果问题很基础。

enter image description here

config/unicorn.rb

# config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 65
preload_app true

before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end

defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end

defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end

gem 文件

source 'https://rubygems.org'
ruby '2.1.4'
.
.
.
group :production do
gem 'pg', '0.17.1'
gem 'rails_12factor', '0.0.2'
gem 'unicorn'
end

一些附加信息。 enter image description here

最佳答案

这个问题实际上并不基础,这东西很棘手。我不完全清楚为什么您会收到 H12(请求超时)错误,尤其是 H18(请求中断)错误,因为流量增加。值得尝试弄清楚发生了什么——对于 H12,查看日志(或使用新遗留物设置日志记录),以确定处理单个请求需要多长时间。如果没有负载的单个请求花费的时间超过几秒钟(这已经有点长了),您可能会想要找出原因并加快速度——通过修改您的实际应用程序代码来避免这些缓慢的 react 。 H18 对我来说更加神秘。

但是,如果个别请求相当快,而您的问题确实只是没有足够的处理能力来处理您的流量(根据您告诉我们的内容,我不一定会做出这样的假设)——那么您可以做一些事情以充分利用您可用的处理能力。或者你也可以增加测功机的数量,当然。如果这真的是问题所在。

为了最大限度地利用您所拥有的资源,我会使用 puma 而不是 unicorn -- puma is currently the heroku-recommended app server for Rails .

puma,正如 heroku 文档所解释的,允许您运行多个 Rails 进程,以及让每个进程使用多个线程并发处理请求。尽管多线程请求处理要求您的应用程序是线程安全的——Rails 本身是线程安全的,但您的应用程序代码或您正在使用的 gem 可能不是。 Rails 中的线程安全基本上就是避免共享全局状态(类或模块变量;全局变量),除了在程序启动时设置的只读状态(或为多线程访问正确同步的全局状态)。

与其他一些答案相反,我很确定 Unicorn 根本不使用多线程,它只使用多个进程。 Puma 可以运行多个进程,每个进程也使用多个线程。

对于在 I/O(通常是数据库)上花费大量时间等待的大多数典型 Rails 应用程序,多线程请求处理绝对是在给定硬件限制内最大化吞吐量和最小化延迟的方法。即使使用 MRI ruby​​ 和它的“全局解释器锁”。为了获得更好的性能,请部署在没有 GIL 的 JRuby 或 rubinius 上。

无论哪种方式,这只是一个计算出有多少个 puma 进程,每个进程有多少个最大线程,你可以在你的 dyno 中安装而不会耗尽内存的问题。 heroku 文档建议您通常可以在 1x dyno 中运行 2-4 个 puma 进程。您可能每个线程的最大线程配置为 2 个甚至 10 个线程。

heroku puma docs非常好,应该可以为您提供有关注意事项的概述。

但这一切都假设,正如您的问题所做的那样,您的 heroku H12 和 H18 错误问题实际上是您需要更多的处理能力来处理您的请求流量。我不确定那是真的,但它可能是。

关于ruby-on-rails - Rails 4 - 如何优化我的 Heroku 生产环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29379682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com