Каково соответствующее количество работников 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 и т.д.