2

スレッドの数pumaを変更して、複数のリクエストを同時に処理できます。しかし、Heroku の場合、postgres へのデータベース接続は制限されています。

より多くのリクエストを処理するために、dyno の数を増やすことができます。各 dyno には、デフォルトで 0:16 のスレッドがあります。この場合、負荷がかかると、各 dyno はデータベースに対して 16 の接続を確立できます。

RailsActiveRecordでは、次の構成を使用して、Rails ワーカー プロセスごとのデータベース接続数を制限できます。

Rails.application.config.after_initialize do
  ActiveRecord::Base.connection_pool.disconnect!

  ActiveSupport.on_load(:active_record) do
    config = ActiveRecord::Base.configurations[Rails.env]
    config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
    config['pool']              = ENV['DB_POOL']      || ENV['MAX_THREADS'] || 5
    ActiveRecord::Base.establish_connection(config)
  end
end

ただし、db 接続制限では、dyno の数が増えると接続制限に達します。

リクエストが処理されたらすぐにスレッドを強制終了してデータベース接続を閉じる方法はありますか?

pgbouncerasを使用してみましたbuildpackが、準備済みステートメントに問題があります。

現在rails 4.0.0使用中puma 2.7.1です。

リクエストが完了したときにこのように構成できるイベントフックがプーマにありますか?

on_worker_boot do
  ActiveSupport.on_load(:active_record) do
    ActiveRecord::Base.establish_connection
  end
end
4

1 に答える 1

1

MRI を使用する場合は、puma のクラスター モードを使用してみてください。4人のワーカーをセットアップすることをお勧めします。

puma -w 4

Jruby を使用する場合は、20 近くのスレッドを指定する必要があります。ただし、DB への許可された接続数を超えてはなりません。

puma -t 20:20

より詳しい情報:

https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#thread-safety

https://devcenter.heroku.com/articles/concurrency-and-database-connections#maximum-database-connections

于 2014-10-15T12:26:48.620 に答える