Quel est le nombre approprié de travailleurs Gunicorn pour chaque type D'Instance Amazon?
je suis en train d'essayer de comprendre quel est le nombre approprié de travailleurs pour chaque type D'Instance Amazon. J'avais l'habitude de diriger un ouvrier de Gunicorn, cependant cela s'est avéré être assez lent.
beaucoup de développeurs utilisent actuellement cette formule pour évaluer combien de travailleurs seraient appropriés:
NUM_WORKERS=3 #recommended formula here is 1 + 2 * NUM_CORES
le problème que J'ai est Qu'Amazon n'est pas tout à fait clair quant au nombre de cœurs que chaque instance est en cours d'exécution. Par exemple, Une petite Instance M1 a 1 Unité de calcul EC2 (1 noyau virtuel avec 1 Unité de calcul EC2)--2-->
Ce que cela signifie essentiellement? Qu'il a un cœur? ou qu'il dispose de deux cœurs?
4 réponses
Amazon EC2m1.small
le type d'instance a certainement un noyau virtuel seulement; du point de vue du threading/worker vous pouvez ignorer le EC2 Unité de calcul (ECU) spécification entièrement et prendre le nombre de noyaux (virtuels) listés sur le Amazon EC2 types D'instances page littéralement, en multipliant par le nombre de CPU inscrits, s'il y a lieu (seulement pour les cas de clusters).
si vous voulez éviter de faire les maths et / ou l'accès par programme, vous pourriez avoir un coup d'oeil à l' missingcloud - aws.json l'ensemble de données comporte un champ core à l'intérieur du instance_types collection, par exemple:
"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]},
...
}
je sais que c'est une vieille question. Mais je pense que j'ai une meilleure réponse à cette question. Gunicorn docs suggère que 2n+1 [gunicorn -w <2n+1> myapp:wsgi
] est une bonne estimation du nombre de travailleurs (Oui, n = nombre de cœurs). J'ai inventé un petit script shell pour appliquer cette formule. Tout ce que vous devez faire est ceci:
gunicorn -w $(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 )) myapp:wsgi
la commande
cat /proc/cpuinfo | grep 'core id' | wc -l
retournera le nombre total de cœurs CPU réels (n). Donc
$(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 ))
égale à 2n+1 Formule.
appliquez la formule 2n+1 à toutes les machines basées sur linux. Vous n'avez pas besoin de connaître le nombre de travailleurs pour chaque type d'instance ou quelque chose comme ça.
Référence: http://dhilipsiva.com/2015/10/22/appropriate-number-of-gunicorn-workers.html
epicbrew travail, voici comment lancer 2N+1 Gunicorn travailleurs, où N = nombre de cœurs de PROCESSEUR:
gunicorn --workers=$((2 * $(getconf _NPROCESSORS_ONLN) + 1)) wsgi:application
cela fonctionne à la fois sur Linux et macOS! Plus de détails sur l' John raconte tout le blog.
un moyen facile de voir combien de cpu sont détectés est d'exécuter top et d'appuyer sur "1" pour afficher le nombre de cpu. Vous verrez cpu0, cpu1, cpu2, etc.