puppet: Use nice to deprioritize various processes.

Our priority hierarchy is:
(1) Tornado and base services like memcached, redis, etc.
(2) Django and message sender queue workers.
(3) Everything else.

Ideally, we'd have something a bit more fine-grained (e.g. some queue
workers are potentially in the sending path, while others aren't), but
this should have a big impact on ensuring Tornado gets the resources
it needs during load spikes.

I think this has a good chance of causing some load spikes that would
previously have resulted in a user-facing delivery delays no longer
having any significant user-facing impact.
This commit is contained in:
Tim Abbott
2019-06-05 11:54:10 -07:00
parent 2ff969c5a9
commit d959de7a89

View File

@@ -8,7 +8,7 @@
; variables can be expanded using this syntax: "%(ENV_HOME)s". ; variables can be expanded using this syntax: "%(ENV_HOME)s".
[program:zulip-django] [program:zulip-django]
command=/home/zulip/deployments/current/zulip-current-venv/bin/uwsgi --ini /etc/zulip/uwsgi.ini command=nice -n5 /home/zulip/deployments/current/zulip-current-venv/bin/uwsgi --ini /etc/zulip/uwsgi.ini
priority=100 ; the relative start priority (default 999) priority=100 ; the relative start priority (default 999)
autostart=true ; start at supervisord start (default: true) autostart=true ; start at supervisord start (default: true)
autorestart=true ; whether/when to restart (default: unexpected) autorestart=true ; whether/when to restart (default: unexpected)
@@ -58,7 +58,7 @@ directory=/home/zulip/deployments/current/
<% if @queues_multiprocess %> <% if @queues_multiprocess %>
<% @queues.each do |queue| -%> <% @queues.each do |queue| -%>
[program:zulip_events_<%= queue %>] [program:zulip_events_<%= queue %>]
command=/home/zulip/deployments/current/manage.py process_queue --queue_name=<%= queue %> command=nice -n10 /home/zulip/deployments/current/manage.py process_queue --queue_name=<%= queue %>
priority=300 ; the relative start priority (default 999) priority=300 ; the relative start priority (default 999)
autostart=true ; start at supervisord start (default: true) autostart=true ; start at supervisord start (default: true)
autorestart=true ; whether/when to restart (default: unexpected) autorestart=true ; whether/when to restart (default: unexpected)
@@ -73,7 +73,7 @@ directory=/home/zulip/deployments/current/
<% end -%> <% end -%>
<% else %> <% else %>
[program:zulip_events] [program:zulip_events]
command=/home/zulip/deployments/current/manage.py process_queue --multi_threaded <%= @queues.join(' ') %> command=nice -n10 /home/zulip/deployments/current/manage.py process_queue --multi_threaded <%= @queues.join(' ') %>
priority=300 ; the relative start priority (default 999) priority=300 ; the relative start priority (default 999)
autostart=true ; start at supervisord start (default: true) autostart=true ; start at supervisord start (default: true)
autorestart=true ; whether/when to restart (default: unexpected) autorestart=true ; whether/when to restart (default: unexpected)
@@ -90,7 +90,7 @@ killasgroup=true ; Without this, we leak processes every restart
<% end %> <% end %>
[program:zulip_deliver_enqueued_emails] [program:zulip_deliver_enqueued_emails]
command=/home/zulip/deployments/current/manage.py deliver_email command=nice -n15 /home/zulip/deployments/current/manage.py deliver_email
priority=350 ; the relative start priority (default 999) priority=350 ; the relative start priority (default 999)
autostart=true ; start at supervisord start (default: true) autostart=true ; start at supervisord start (default: true)
autorestart=true ; whether/when to restart (default: unexpected) autorestart=true ; whether/when to restart (default: unexpected)
@@ -104,7 +104,7 @@ stdout_logfile_backups=3 ; # of stdout logfile backups (default 10)
directory=/home/zulip/deployments/current/ directory=/home/zulip/deployments/current/
[program:zulip_deliver_scheduled_messages] [program:zulip_deliver_scheduled_messages]
command=/home/zulip/deployments/current/manage.py deliver_scheduled_messages command=nice -n15 /home/zulip/deployments/current/manage.py deliver_scheduled_messages
priority=350 ; the relative start priority (default 999) priority=350 ; the relative start priority (default 999)
autostart=true ; start at supervisord start (default: true) autostart=true ; start at supervisord start (default: true)
autorestart=true ; whether/when to restart (default: unexpected) autorestart=true ; whether/when to restart (default: unexpected)
@@ -118,7 +118,7 @@ stdout_logfile_backups=3 ; # of stdout logfile backups (default 10)
directory=/home/zulip/deployments/current/ directory=/home/zulip/deployments/current/
[program:zulip_events_message_sender] [program:zulip_events_message_sender]
command=/home/zulip/deployments/current/manage.py process_queue --queue_name=message_sender --worker_num=%(process_num)s command=nice -n5 /home/zulip/deployments/current/manage.py process_queue --queue_name=message_sender --worker_num=%(process_num)s
process_name=%(program_name)s-%(process_num)s process_name=%(program_name)s-%(process_num)s
priority=350 ; the relative start priority (default 999) priority=350 ; the relative start priority (default 999)
autostart=true ; start at supervisord start (default: true) autostart=true ; start at supervisord start (default: true)