我需要关于在我的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) 由于 Cluster 工作进程是被 fork 的,我是否需要类似 Unicorn 中的 before_fork / after_fork 配置?
b) 如何根据我的应用程序调整线程数量 - 降低线程数量的原因是什么?在什么情况下会有所不同? 0:16 不已经优化了吗?
c) Heroku 数据库允许 500 个连接。根据线程、工作进程和 dyno 数量,DB_POOL 的适当值是多少?每个线程、工作进程和 dyno 是否都需要单独的 DB 连接来并行工作?
总体而言,如何配置并发性和性能?
ab
并增加工作进程数(在您的情况下是线程),直到性能下降(请求需要更长时间才能完成)。最好先使用相对动态的页面,观察不同请求/并发比例的表现(还要记住,如果您发送了许多请求,Heroku 可能会中断您的连接,怀疑您正在进行 DoS 攻击)。 - Mike Szyndel