[bbb-greenlight: 21/39] Puma Worker Configuration (#1701)




commit 42868642638e7bb95503cb18384d1c06c9025bd6
Author: Lars Kiesow <lkiesow uos de>
Date:   Tue Sep 29 17:44:47 2020 +0200

    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 <ahmad af farhat gmail com>

 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 fda772a..44bed0b 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 062a8c9..c59bba9 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]