优化Heroku,Rails和Unicorn:定义适当的配置选项,比如有多少个工作进程?

 水妖精Fairy 发布于 2023-02-06 10:52

我们为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

markquezada.. 10

目前接受的答案中包含一些不正确的信息.

根据dyno大小的heroku文档,2X dynos拥有2X cpu份额,而不仅仅是内存的两倍:

在此输入图像描述

无论如何,由于可以使用的独角兽工作者的数量必然会占用内存占用,因此您最有可能从2X dyno中获得更高的性能,您可以更好地使用可用内存.

例如,您可能能够运行一个2X dyno与7个独角兽工作者和两个1X dynos与3个独角兽工作者(总共6个).使用更多dynos时,也可能存在一些路由开销.

通过关于优化dyno用法的heroku文档:

虽然高度依赖于app,但下表列出了每个dyno大小可以运行多少Unicorn worker的一些粗略的经验法则:

在此输入图像描述

考虑到这一点,要优化使用的最重要的事情是总内存占用量.您可以启用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附加组件一起使用,以便更好地了解应用程序的峰值使用要求:

在此输入图像描述

该NewRelic的增加上可以用于类似的目的.

希望有所帮助.

1 个回答
  • 目前接受的答案中包含一些不正确的信息.

    根据dyno大小的heroku文档,2X dynos拥有2X cpu份额,而不仅仅是内存的两倍:

    在此输入图像描述

    无论如何,由于可以使用的独角兽工作者的数量必然会占用内存占用,因此您最有可能从2X dyno中获得更高的性能,您可以更好地使用可用内存.

    例如,您可能能够运行一个2X dyno与7个独角兽工作者和两个1X dynos与3个独角兽工作者(总共6个).使用更多dynos时,也可能存在一些路由开销.

    通过关于优化dyno用法的heroku文档:

    虽然高度依赖于app,但下表列出了每个dyno大小可以运行多少Unicorn worker的一些粗略的经验法则:

    在此输入图像描述

    考虑到这一点,要优化使用的最重要的事情是总内存占用量.您可以启用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附加组件一起使用,以便更好地了解应用程序的峰值使用要求:

    在此输入图像描述

    该NewRelic的增加上可以用于类似的目的.

    希望有所帮助.

    2023-02-06 10:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有