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;
}