From 42868642638e7bb95503cb18384d1c06c9025bd6 Mon Sep 17 00:00:00 2001 From: Lars Kiesow Date: Tue, 29 Sep 2020 17:44:47 +0200 Subject: [PATCH] Puma Worker Configuration (#1701) We noticed that the current default settings perform very poorly under load. We managed to literally take down Greenlight during a larger event when people where accessing the landing page for rooms and when doing some tests, I was more or less able to DoS Greenlight on my own. This patch adds a default worker configuration similar to the previous configuration with one worker, but lets users easily adjust it to more workers which significantly improves the situation. The small, 4 core machine I was testing on could handle about thrice the amount of requests. Co-authored-by: Ahmad Farhat --- config/puma.rb | 4 ++-- sample.env | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/config/puma.rb b/config/puma.rb index fda772af..44bed0b5 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -23,14 +23,14 @@ environment ENV.fetch("RAILS_ENV") { "development" } # Workers do not work on JRuby or Windows (both of which do not support # processes). # -# workers ENV.fetch("WEB_CONCURRENCY") { 2 } +workers ENV.fetch("WEB_CONCURRENCY") { 1 } # Use the `preload_app!` method when specifying a `workers` number. # This directive tells Puma to first boot the application and load code # before forking the application. This takes advantage of Copy On Write # process behavior so workers use less memory. # -# preload_app! +preload_app! # Allow puma to be restarted by `rails restart` command. plugin :tmp_restart diff --git a/sample.env b/sample.env index 062a8c9b..c59bba94 100644 --- a/sample.env +++ b/sample.env @@ -268,7 +268,7 @@ CABLE_ADAPTER=postgresql DEFAULT_REGISTRATION=open # Preupload Presentation Storage -# +# # By default, if Preupload Presentation is enabled for rooms, presentations are uploaded locally to ~/greenlight/storage # If you prefer to use AWS S3 or GCS Storage, you can set the variables below # @@ -287,3 +287,15 @@ DEFAULT_REGISTRATION=open # GCS_CLIENT_CERT= # GCS_PROJECT= # GCS_BUCKET= + +# Web server settings +# +# The size of the thread pool per worker used by Greenlight's web server. +# For details, see: https://github.com/puma/puma#thread-pool +# Default: 5 +#RAILS_MAX_THREADS=5 + +# The amount of workers (separate processes) used by the web server. +# For details, see: https://github.com/puma/puma#clustered-mode +# Default: 1 +#WEB_CONCURRENCY=1