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?

12
demandé sur noahandthewhale 2013-04-12 23:30:26

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]},
        ...
}
5
répondu Steffen Opel 2013-04-12 19:53:11

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

23
répondu dhilipsiva 2015-10-22 15:46:44

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.

10
répondu johntellsall 2017-05-23 12:17:34

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.

3
répondu Lars Hansson 2013-04-13 07:06:21