Gunicorn: multiprocessing.cpu_count() es peligroso en contenedores

Creado en 2 may. 2019  ·  4Comentarios  ·  Fuente: benoitc/gunicorn

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

Debido a https://bugs.python.org/issue36054 , la recomendación de estos documentos es peligrosa cuando se ejecuta dentro de un contenedor. Si a su contenedor se le ha asignado (digamos) un solo núcleo y 512 MB de RAM en una máquina con 64 núcleos, multiprocessing.cpu_count() cree que tiene 64 núcleos en lugar de solo 1, y termina generando 129 trabajadores. Esto es mucho más de lo que el contenedor tiene recursos para, y termina causando fallas en la memoria.

Comentario más útil

@twosigmajab buena idea! por favor adelante :)

Todos 4 comentarios

¡Hola 😄! Gracias por la notificación.

El valor predeterminado en Gunicorn es un solo trabajador, incluso si la documentación tiene un ejemplo de detección del número. Dado que parece probable que eventualmente se corrija un error de Python, no estoy seguro de que haya algo que debamos hacer en particular aquí. Sin embargo, archivarlo río abajo en el matraz-gunicorn tiene mucho sentido.

es más algo que debería arreglarse en python, no es realmente un problema allí. La documentación se realizó en el momento en que Docker ni siquiera existía, pero creo que sigue siendo útil para el ejemplo, ya que es muy explícito. Cerrando el tema entonces.

Agregar 1 pequeña línea a los documentos para decir ("¡pero tenga cuidado con BPO-36054 si usa contenedores!") Podría ahorrarles dolores de cabeza a muchos usuarios durante los ~ años que seguirán usando versiones de Python que no tienen esto arreglado. Si no se opone a fusionar eso, enviaré un PR si nadie me gana.

@twosigmajab buena idea! por favor adelante :)

¿Fue útil esta página
0 / 5 - 0 calificaciones