diff options
author | Jeremy Daer <jeremydaer@gmail.com> | 2016-03-31 06:46:34 -0700 |
---|---|---|
committer | Jeremy Daer <jeremydaer@gmail.com> | 2016-03-31 06:46:34 -0700 |
commit | 903f447e436a7c909c3afc552f27bbbc1b4770c8 (patch) | |
tree | 54490cfeec19a8a59865001ca64ef57dadb9fc79 /actioncable/lib/action_cable/server | |
parent | a564fecbd0c96815664067b727817045459cae98 (diff) | |
parent | 4c79c59c6e5c871b091cc1163ce4e6adad090095 (diff) | |
download | rails-903f447e436a7c909c3afc552f27bbbc1b4770c8.tar.gz rails-903f447e436a7c909c3afc552f27bbbc1b4770c8.tar.bz2 rails-903f447e436a7c909c3afc552f27bbbc1b4770c8.zip |
Merge pull request #24376 from jeremy/cable/downsize-worker-pool-default-size
Cable: reconcile default worker pool size with low db conn pool size
Diffstat (limited to 'actioncable/lib/action_cable/server')
-rw-r--r-- | actioncable/lib/action_cable/server/base.rb | 12 | ||||
-rw-r--r-- | actioncable/lib/action_cable/server/configuration.rb | 2 |
2 files changed, 12 insertions, 2 deletions
diff --git a/actioncable/lib/action_cable/server/base.rb b/actioncable/lib/action_cable/server/base.rb index 778f5ffeed..b1a0e11631 100644 --- a/actioncable/lib/action_cable/server/base.rb +++ b/actioncable/lib/action_cable/server/base.rb @@ -52,7 +52,17 @@ module ActionCable @event_loop || @mutex.synchronize { @event_loop ||= config.event_loop_class.new } end - # The thread worker pool for handling all the connection work on this server. Default size is set by config.worker_pool_size. + # The worker pool is where we run connection callbacks and channel actions. We do as little as possible on the server's main thread. + # The worker pool is an executor service that's backed by a pool of threads working from a task queue. The thread pool size maxes out + # at 4 worker threads by default. Tune the size yourself with config.action_cable.worker_pool_size. + # + # Using Active Record, Redis, etc within your channel actions means you'll get a separate connection from each thread in the worker pool. + # Plan your deployment accordingly: 5 servers each running 5 Puma workers each running an 8-thread worker pool means at least 200 database + # connections. + # + # Also, ensure that your database connection pool size is as least as large as your worker pool size. Otherwise, workers may oversubscribe + # the db connection pool and block while they wait for other workers to release their connections. Use a smaller worker pool or a larger + # db connection pool instead. def worker_pool @worker_pool || @mutex.synchronize { @worker_pool ||= ActionCable::Server::Worker.new(max_size: config.worker_pool_size) } end diff --git a/actioncable/lib/action_cable/server/configuration.rb b/actioncable/lib/action_cable/server/configuration.rb index 5fe71caed2..0bb378cf03 100644 --- a/actioncable/lib/action_cable/server/configuration.rb +++ b/actioncable/lib/action_cable/server/configuration.rb @@ -14,7 +14,7 @@ module ActionCable @log_tags = [] @connection_class = ActionCable::Connection::Base - @worker_pool_size = 100 + @worker_pool_size = 4 @disable_request_forgery_protection = false end |