На главную

DevOps и серверы

Сколько воркеров ставить

Сколько воркеров, процессов и потоков ставить Gunicorn, Uvicorn, PHP-FPM, Puma, Node.js, Celery и Sidekiq: по ядрам, по памяти и по бюджету соединений с базой. Показывает, во что упёрлись, и даёт готовый фрагмент конфига вместе с nginx.

Сервер

Всё, что живёт на машине кроме воркеров

RSS под нагрузкой: ps -o rss,cmd -C gunicorn

Приложение

Запрос к базе, немного логики, ответ.

База данных

0 — не проверять

Результат

9

процессов

1

поток в процессе

1350 МБ

из 6656 МБ свободных

45

соединений с базой из 90

Ограничение: ядра. Формула из документации Gunicorn — (2 × ядра) + 1 синхронных воркеров: пока один ждёт ввод-вывод, другой считает.

gunicorn.conf.py

workers = 9
worker_class = "sync"
timeout = 30
graceful_timeout = 30
max_requests = 1000
max_requests_jitter = 100
preload_app = True
bind = "127.0.0.1:8000"

nginx перед приложением

4 × 4096 соединений — до 8192 клиентов одновременно: при проксировании каждый клиент занимает два соединения, к нему и к приложению.

worker_processes auto;
worker_rlimit_nofile 8192;

events {
    worker_connections 4096;
    multi_accept on;
}