【发布时间】:2013-07-28 01:00:22
【问题描述】:
我需要一些帮助来配置我的 RoR4 Heroku 应用程序上的 Puma(多线程+多核服务器)。 Heroku 文档不是最新的。我遵循了这个:Concurrency and Database Connections 的配置,它没有提到集群的配置,所以我不得不同时使用这两种类型(线程和多核)。
我目前的配置:
./Procfile
web: bundle exec puma -p $PORT -C config/puma.rb
./config/puma.rb
environment production
threads 0,16
workers 4
preload_app!
on_worker_boot do
ActiveRecord::Base.connection_pool.disconnect!
ActiveSupport.on_load(:active_record) do
config = Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['DB_POOL'] || 5
ActiveRecord::Base.establish_connection
end
end
问题:
a) 我是否需要像 Unicorn 中的 before_fork / after_fork 配置,因为集群工作人员是分叉的?
b) 如何根据我的应用程序调整线程数 - 将其删除的原因是什么? / 在什么情况下会有所作为? 0:16 不是已经优化了吗?
c) Heroku 数据库允许 500 个连接。根据线程、工作者和测功机计数,DB_POOL 有什么好的价值? - 在并行工作时,每个工作人员每个测功机的每个线程是否都需要一个单独的数据库连接?
总的来说:我的配置在并发性和性能方面应该如何?
【问题讨论】:
-
在调整线程数方面。我读了一篇关于 Unicorn worker 调优的教程,该教程建议运行
ab并增加 worker 数量(在你的情况下是线程),直到性能下降(请求需要更多时间才能完成)。最好使用一个相当动态的页面,并首先查看不同的请求/并发比例如何起作用(还要记住,如果您执行许多请求,heroku 可能会阻止您怀疑 DoS) -
@MichaelSzyndel 所以我基本上必须先检查每个工人,检查性能,然后通过线程并再次检查?这不取决于具体要求什么吗?
-
从我在某处读到的内容,Heroku 每个测功机有两个核心(4 个虚拟)。每个测功机有一个进程是最佳的,然后由您决定每个进程运行多少个线程。我会用 ab 测试。还要记住,如果您超过 521MB 的 RAM,Heroku 将发送警报,并且它会以 >1GB 的速度交换(与 heroku 文档确认)
-
您使用哪种测功机类型?您提到:
Multi-Thread+Multi-Core Server是否意味着PXdyno(每月 500 美元)?
标签: ruby-on-rails postgresql heroku unicorn puma