ruby-on-rails - 优化 Heroku、Rails 和 Unicorn : defining proper configuration options like how many worker processes?

标签 ruby-on-rails ruby-on-rails-3 heroku mongoid unicorn

我们有以下 Unicorn 的配置文件。我们在 Rails 3.2.12 和 Mongoid 3.1.16 上。我们应该如何确定要使用多少工作进程?我们是否可以包括其他选项来提高性能?

谢谢!

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

before_fork do |server, worker|
  # TERM signals indicates the Heroku Dyno is shutting down
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end
end

after_fork do |server, worker|
  # TERM signals indicates the Heroku Dyno is shutting down
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end
end

最佳答案

这个当前接受的答案中有一些不正确的信息。

根据 heroku docs on dyno size ,2X dynos 具有 2X cpu 份额,而不仅仅是双倍内存:

enter image description here

无论如何,由于可以使用的 unicorn worker 数量与内存占用量有关,因此您很可能会从 2X dyno 中获得更高的性能,您可以更好地使用可用内存。

例如,您可以使用 7 名 unicorn worker 运行一个 2X dyno,而使用 3 名 unicorn worker (总共 6 个)运行两个 1X dyno。使用更多 dynos 时,也可能会有一些路由开销。

通过 heroku docs on optimizing dyno usage :

While highly app dependent, the following table lists some rough rules of thumb for how many Unicorn workers can be run on each dyno size:



enter image description here

考虑到这一点,优化使用最重要的事情是总内存占用。您可以启用heroku 的log-runtime-metrics 以将 实际 内存和cpu 使用信息打印到heroku 日志中。它看起来像这样:
source=web.1 dyno=heroku.2808254.d97d0ea7-cf3d-411b-b453-d2943a50b456 sample#load_avg_1m=2.46 sample#load_avg_5m=1.06 sample#load_avg_15m=0.99
source=web.1 dyno=heroku.2808254.d97d0ea7-cf3d-411b-b453-d2943a50b456 sample#memory_total=21.00MB sample#memory_rss=21.22MB sample#memory_cache=0.00MB sample#memory_swap=0.00MB sample#memory_pgpgin=348836pages sample#memory_pgpgout=343403pages

正如上面链接的文章中提到的,您可以将它与 librato add-on 结合使用来绘制随时间变化的使用情况,以更好地了解您的应用程序的高峰使用需求:

enter image description here

NewRelic add on 可用于类似目的。

希望有帮助。

关于ruby-on-rails - 优化 Heroku、Rails 和 Unicorn : defining proper configuration options like how many worker processes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959272/

相关文章:

activerecord - 如何从 Rails 的查询中排除 id 数组(使用 ActiveRecord)?

jquery - 根据选择框选择显示/隐藏文本字段

python - Flask 登录和 Heroku 问题

javascript - 将 NodeJS 应用程序上传到 Heroku 时缩小 JS 和 CSS 的好方法是什么

ruby-on-rails - Rails 跳过条件验证

ruby-on-rails - 有没有在 Arel NamedFunction 节点中使用 ORDER BY 的干净方法?

ruby-on-rails - 如何在Rails中避免 'frozen hash'错误而不使用空的begin-rescue-end循环?

ruby-on-rails - 从头开始嵌套评论

ruby-on-rails - 访问 has_many 关系时指定订单和限制的快捷方式?

perl - 如何在我的 Heroku/Perl Web 应用程序中使用自定义模块?