Gunicorn: multiprocessing.cpu_count() é perigoso em contêineres

Criado em 2 mai. 2019  ·  4Comentários  ·  Fonte: benoitc/gunicorn

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

Devido a https://bugs.python.org/issue36054 , a recomendação nesses documentos é perigosa ao executar dentro de um contêiner. Se seu contêiner foi alocado (digamos) um único núcleo e 512 MB de RAM em uma máquina com 64 núcleos, multiprocessing.cpu_count() pensa que tem 64 núcleos em vez de apenas 1, e você acaba gerando 129 trabalhadores. Isso é muito mais do que o contêiner tem recursos e acaba causando falhas de memória.

Comentários muito úteis

@twosigmajab boa ideia! Por favor, vá em frente :)

Todos 4 comentários

Olá 😄! Obrigado pela notificação.

O padrão no Gunicorn é um único trabalhador, mesmo que a documentação tenha um exemplo de detecção do número. Dado que isso parece ser uma correção de bug do Python eventualmente, não tenho certeza se há algo que devamos fazer em particular aqui. No entanto, arquivá-lo a jusante no frasco-gunicorn faz muito sentido.

é mais algo que deve ser corrigido em python, não é realmente um problema. A documentação foi feita no momento em que o docker nem existia, mas acho que ainda é útil para o exemplo, pois é muito explícito. Fechando o assunto então.

Adicionar 1 pequena linha aos documentos para dizer ("mas cuidado com o BPO-36054 se estiver usando contêineres!") pode salvar muitas dores de cabeça de usuários pelos ~ anos em que ainda usarão versões do Python que não têm isso corrigido. Se você não se opuser à fusão, enviarei um PR se ninguém me vencer.

@twosigmajab boa ideia! Por favor, vá em frente :)

Esta página foi útil?
0 / 5 - 0 avaliações