Gunicorn: multiprocessing.cpu_count() est dangereux dans les conteneurs

Créé le 2 mai 2019  ·  4Commentaires  ·  Source: benoitc/gunicorn

https://github.com/benoitc/gunicorn/blob/bd833e0009b8b07d13117f71534eb28e8dc24c5d/docs/source/configure.rst#L67

En raison de https://bugs.python.org/issue36054 , la recommandation de ces documents est dangereuse lors de l'exécution à l'intérieur d'un conteneur. Si votre conteneur a été alloué (disons) à un seul cœur et 512 Mo de RAM sur une machine avec 64 cœurs, multiprocessing.cpu_count() pense qu'il a 64 cœurs au lieu d'un seul, et vous finissez par générer 129 travailleurs. C'est bien plus que le conteneur ne dispose de ressources et cela finit par provoquer des plantages de mémoire.

Commentaire le plus utile

@twosigmajab bonne idée ! s'il vous plaît allez-y :)

Tous les 4 commentaires

Bonjour 😄! Merci pour la notification.

La valeur par défaut dans Gunicorn est un travailleur unique, même si la documentation contient un exemple de détection du nombre. Étant donné que cela semble éventuellement être un correctif de bogue Python, je ne suis pas sûr qu'il y ait quelque chose que nous devrions faire en particulier ici. Le classer en aval à flask-gunicorn a cependant beaucoup de sens.

c'est plus quelque chose qui devrait être corrigé en python pas vraiment un problème là-bas. La documentation a été faite à l'époque où docker n'existait même pas mais je pense que c'est toujours utile pour l'exemple car c'est très explicite. Fermeture du sujet alors.

L'ajout d'une petite ligne à la documentation pour dire ("mais méfiez-vous de BPO-36054 si vous utilisez des conteneurs !") pourrait épargner des maux de tête à de nombreux utilisateurs pendant les ~ années où ils utiliseront encore des versions de Python qui n'ont pas cela corrigé. Si vous n'êtes pas opposé à la fusion, je soumettrai un PR si personne ne me bat.

@twosigmajab bonne idée ! s'il vous plaît allez-y :)

Cette page vous a été utile?
0 / 5 - 0 notes