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

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

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

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

Проблема, с которой я сталкиваюсь, заключается в том, что Amazon не совсем понятна в отношении количества ядер, каждый из которых запущен. Например, M1 Small Instance имеет 1 EC2 Compute Unit (1 виртуальное ядро ​​с 1 EC2 Compute Unit)

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

Ответ 1

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

Если вы хотите избежать математики и/или иметь программный доступ к этой информации, вам может потребоваться посмотреть missingcloud project - 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]},
        ...
}

Ответ 2

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

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

Ответ 3

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

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

Это работает как на Linux, так и на macOS! Подробнее о John Tells Весь блог.

Ответ 4

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