RoR4 Heroku アプリでの Puma (マルチスレッド + マルチコア サーバー) の構成について助けが必要です。そのための Heroku ドキュメントは最新ではありません。私はこれに従いました:構成の同時実行とデータベース接続。これにはクラスターの構成については言及されていないため、両方のタイプ(スレッドとマルチコア)を一緒に使用する必要がありました。
私の現在の構成:
./プロファイル
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 ワーカーがフォークされているため、Unicorn のように before_fork / after_fork 構成が必要ですか?
b) アプリケーションに応じてスレッド数を調整するにはどうすればよいですか? 下げる理由は何ですか? / どのような場合に違いがありますか? 0:16 は既に最適化されていませんか?
c) Heroku データベースは 500 の接続を許可します。スレッド、ワーカー、および dyno の数に応じて、DB_POOL の適切な値は何でしょうか? - 並列で作業する場合、dyno ごとのワーカーごとのすべてのスレッドに唯一の DB 接続が必要ですか?
一般的に: 同時実行性とパフォーマンスに関して、私の構成はどのように見えるべきですか?