私のRoR4 HerokuアプリケーションでPuma(マルチスレッド+マルチコアサーバ)を設定する際に助けが必要です。 その上のHerokuドキュメントは最新ではありません。私はこれに続いて:構成のためのConcurrency and Database Connections、それはクラスタのための構成を言及しないので、私は両方のタイプ(スレッドとマルチコア)を一緒に使用しなければならなかった。HerumaのPumaクラスタ設定
私の現在の構成:
./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件の接続が可能です。スレッド、ワーカー、およびdyno数に応じてDB_POOLにはどのような価値がありますか? - 並行して作業する場合は、dynoごとに1人のスレッドごとに1つのDB接続が必要ですか?
一般的に、並行性とパフォーマンスの設定はどうすればよいですか?
スレッド数を調整する場合私はUnicornのワーカーチューニングのチュートリアルを読んで、「ab」を実行し、パフォーマンス低下(要求が完了するまでに時間がかかる)がなくなるまでワーカー数(あなたの場合はスレッド)を増やすことを提案しました。非常にダイナミックなページを使い、さまざまなリクエスト/同時の割合が最初にどのように作用するかを確認することは良いことです(多くの要求をすると、英雄があなたをDoS疑いで騙してしまうかもしれないことを念頭に置いてください) –
@MichaelSzyndelだから、パフォーマンスをチェックしてから、スレッドを調べてもう一度チェックしますか?正確に何が要求されているかに依存しませんか? – Nikom
私がどこかで読んだところから、Herokuはdynoあたり2つのコア(4つの仮想)を持っています。 dynoごとに1つのプロセスを持つことが最適です。プロセスごとに実行するスレッドの数はあなた次第です。私がabでテストすること。また、521MBのRAMを渡すと、Herokuはアラートを送信し、> 1GBでスワップします(ヒロクのドキュメントで確認してください) –