Gunicorn: multiprocessing.cpu_count() ist in Containern gefährlich

Erstellt am 2. Mai 2019  ·  4Kommentare  ·  Quelle: benoitc/gunicorn

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

Aufgrund von https://bugs.python.org/issue36054 ist die Empfehlung in diesen Dokumenten gefährlich, wenn sie in einem Container ausgeführt wird. Wenn Ihrem Container beispielsweise ein einzelner Kern und 512 MB RAM auf einer Maschine mit 64 Kernen zugewiesen wurden, denkt multiprocessing.cpu_count() , dass er 64 Kerne hat, anstatt nur 1, und Sie erzeugen am Ende 129 Worker. Dies ist viel mehr, als der Container über Ressourcen verfügt, und führt am Ende zu Arbeitsspeicherabstürzen.

Hilfreichster Kommentar

@twosigmajab gute Idee! bitte fahre fort :)

Alle 4 Kommentare

Hallo 😄! Danke für die Benachrichtigung.

Der Standardwert in Gunicorn ist ein einzelner Arbeiter, auch wenn die Dokumentation ein Beispiel für die Erkennung der Nummer enthält. Angesichts der Tatsache, dass dies wahrscheinlich letztendlich eine Python-Fehlerbehebung sein wird, bin ich mir nicht sicher, ob wir hier etwas Besonderes tun sollten. Es macht jedoch sehr viel Sinn, es stromabwärts bei Flask-Gunicorn einzureichen.

Es ist eher etwas, das in Python behoben werden sollte, nicht wirklich ein Problem. Die Dokumentation wurde erstellt, als Docker noch nicht einmal existierten, aber ich denke, sie ist immer noch nützlich für das Beispiel, da sie sehr explizit ist. Schließe das Thema dann.

Das Hinzufügen einer winzigen Zeile zu den Dokumenten, um zu sagen („aber Vorsicht vor BPO-36054 , wenn Sie Container verwenden!“), könnte vielen Benutzern Kopfschmerzen für die ~ Jahre ersparen, in denen sie immer noch Versionen von Python verwenden, in denen dies nicht behoben ist. Wenn Sie nicht dagegen sind, das zusammenzuführen, werde ich eine PR einreichen, wenn mir niemand zuvorkommt.

@twosigmajab gute Idee! bitte fahre fort :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen