Назад | Перейти на главную страницу

Оптимизировать количество рабочих для нескольких экземпляров Gunicorn

Я настраиваю gunicorn (контролируется супервизором и находится за интерфейсом nginx) и немного запутался в выборе оптимального количества процессов для настройки.

в документация ясно объясняется, что:

workers = multiprocessing.cpu_count() * 2 + 1

Моя машина - четырехъядерная, так что она рассчитана на 9 рабочих.

Но я хочу бежать несколько приложения, каждое из которых прослушивает другой порт.

Если счет будет (усечен):

workers_per_application = int(workers / NUM_APPLICATIONS)

Или у каждого должно быть указанное выше количество рабочих?

Я думаю, что этот вопрос действительно применим не только к Gunicorn, но и ко всем подобным прослушивающим серверам ...

Честно говоря, worker_per_application - это скорее настройка производительности, чтобы ваше приложение жестяная банка потребляют 100% ЦП в любое время. Это не значит, что будет. Вы можете настроить все свои приложения на 9 рабочих ... при условии, что вы помните, что существует вероятность того, что одно приложение может работать над чем-то очень сложным, что приведет к тому, что другое будет отставать / не отвечать вовремя . Вся штука "cpu_count () * 2 + 1" в лучшем случае является предложением ... и вы можете добавить к нему больше ... или меньше, если сочтете необходимым. Я не уверен, возвращает ли cpu_count () количество физических процессоров ... или количество ядер процессора. Четырехъядерный + гиперпоточность может показаться 8 ядрами, которые будут преобразованы как 17 процессов ... или это может считаться только 1 ... преобразованием как 3 процесса. Поиграйте с ним и посмотрите, что произойдет.

Вы можете установить для этого жесткое число, если хотите, чтобы два приложения работали одинаково хорошо, не замечая большого отставания, вызванного другим.