Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

nginx+puma+rails の worker,thread,connection pool 数の目安



MRI(Matz's Ruby Implementation) の前提, JRubyの場合は考え方が変わる。

nginx の worker 数の目安


nginxのworkerプロセス数をCPUコア数の倍数で自動的に設定できるモジュールを書いた - 人間とウェブの未来


nginx の worker 数を設定する

以下のように conf を設定してあげれば、nginxがコア数に応じたプロセスを立ち上げてくれる。

worker_processes auto;

puma の worker 数の目安


Use cluster mode and set the number of workers to 1.5x the number of cpu cores in the machine, minimum 2.

puma の thread 数の目安

Set the number of threads to desired concurrent requests / number of workers. Puma defaults to 16 and that's a decent number.

デフォルトの 16 therad (1プロセスあたり)はちょうど良いくらいの設定らしい?

Watching your CPU utilization over time and aim for about 70% on average. This means you've got capacity still but aren't starving threads.



database の connection pool 数の目安

puma の thread 数と同数とする。
database.yml に設定された pool の数はプロセスごとに確保される値なので、thread数を設定すれば十分。

If you are using the Puma web server we recommend setting the pool value to equal ENV['RAILS_MAX_THREADS']
Concurrency and Database Connections in Ruby with ActiveRecord | Heroku Dev Center

puma の worker 数, thread 数, db の connection pool 数 を設定する

手元の Rails 5.1.3 では thread 数と connection pool 数は、環境変数 RAILS_MAX_THREADS に従うようになっていました。

puma の worker 数は環境変数 WEB_CONCURRENCY に従うような設定が記述されていますが、デフォルトでコメントアウトされているのでアンコメントして有効化する必要があります。

# thread数
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
threads threads_count, threads_count

# worker プロセス数
workers ENV.fetch("WEB_CONCURRENCY") { 2 }

db の connection pool 数は、デフォルトで RAILS_MAX_THREADS に従うようになっています。

default: &default
 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>



Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
Help us understand the problem. What are the problem?