Какое количество работников Gunicorn подходит для каждого типа экземпляра Amazon?

в настоящее время я пытаюсь выяснить, какое количество работников подходит для каждого типа экземпляра Amazon. Я использовал одного работника Gunicorn, однако это оказалось довольно медленным.

многие разработчики в настоящее время используют эту формулу, чтобы оценить, сколько работников будет подходящим:

NUM_WORKERS=3  #recommended formula here is 1 + 2 * NUM_CORES

проблема в том, что Amazon не совсем ясно, сколько ядер работает каждый экземпляр. Например, небольшой экземпляр M1 имеет 1 вычислительную единицу EC2 (1 виртуальное ядро с 1 вычислительной единицей EC2)

что это по сути значит? Что у него одно ядро? или что у него два ядра?

4 ответов


на Amazon EC2 m1.small тип экземпляра определенно имеет только одно виртуальное ядро; с точки зрения потока/рабочего вы можете игнорировать EC2 вычислительный блок (ECU) спецификация полностью и взять указанное количество (виртуальных) ядер на типы инстансов Amazon EC2 страница буквально, умножая на количество перечисленных процессоров, где это применимо (только для экземпляров кластера).

Если вы хотите избежать выполнения математики и / или иметь программный доступ к этой информации, вы можете взглянуть на missingcloud - в aws.в JSON dataset имеет поле ядер в instance_types сбор, например:

"instance_types" : {
        "m1.small" : {
            "compute_units" : 1,
            "cores" : 1,
            "gpus" : 0,
            "ramMB" : 1700,
            "storageGB" : [10, 160],
            "i/o" : "moderate",
            "ebs_optimized_iopsMbps" : 0,
            "arch" : [32,64]},
        ...
}

Я знаю, это старый вопрос. Но я думаю, что у меня есть лучший ответ на этот вопрос. Gunicorn docs предполагает, что 2n+1 [gunicorn -w <2n+1> myapp:wsgi] является хорошей догадкой для количества рабочих (да, n = количество ядер). Я придумал крошечный сценарий оболочки, чтобы применить эту формулу. Все что вам нужно сделать это:

gunicorn -w $(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 )) myapp:wsgi

команд

cat /proc/cpuinfo | grep 'core id' | wc -l

вернет общее количество фактических ядер процессора (n). Так что

$(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 ))

приравнивается к формуле 2n+1.

это примените формулу 2n+1 ко всем машинам на базе linux. Вам не нужно знать количество рабочих для каждого типа экземпляра или что-то в этом роде.

ссылка: http://dhilipsiva.com/2015/10/22/appropriate-number-of-gunicorn-workers.html


дом на epicbrew это работа, вот как запустить 2n + 1 Gunicorn рабочих, где N = количество ядер процессора:

gunicorn --workers=$((2 * $(getconf _NPROCESSORS_ONLN) + 1)) wsgi:application

это работает как на Linux, так и на macOS! Более подробно о Джон рассказывает всем блог.


простой способ увидеть, сколько процессоров обнаружено, чтобы запустить сверху и нажмите "1", чтобы показать количество процессоров. Вы увидите cpu0, cpu1, cpu2 и т.д.