Número de otimização de trabalhadores para várias instâncias gnúnicas

6

Estou configurando o gunicorn (monitorado pelo supervisord e por trás de um frontend do nginx) e fiquei um pouco confuso sobre o número ideal de processos a serem configurados.

Na documentação , é claramente explicado que:

workers = multiprocessing.cpu_count() * 2 + 1

Minha máquina é um quad core, então isso deve contar para 9 trabalhadores.

Mas eu quero executar vários aplicativos, cada um ouvindo uma porta diferente.

A contagem deve então ser (truncada):

workers_per_application = int(workers / NUM_APPLICATIONS)

Ou cada um deve ter o número de trabalhadores acima?

Eu acho que esta questão realmente se aplica não apenas ao gunicorn, mas a todos os tipos similares de servidores de escuta ...

    
por Stefano 14.12.2011 / 17:31

1 resposta

5

Honestamente, o workers_per_application é mais um ajuste de desempenho para garantir que o seu aplicativo possa consumir 100% da CPU a qualquer momento. Isso não significa que isso acontecerá. Você pode configurar todos os seus aplicativos para ter 9 funcionários ... contanto que você tenha em mente que há um potencial de que um aplicativo poderia estar trabalhando em algo muito difícil, o que faria com que outro falhasse / falhasse na resposta a tempo . A coisa toda "cpu_count () * 2 + 1" é uma sugestão, na melhor das hipóteses ... e você pode adicionar mais a ela ... ou menos conforme julgar necessário. Não tenho certeza se o cpu_count () retorna o número de processadores físicos ... ou o número de núcleos da CPU. Um hyper-threading quad-core + pode parecer ser 8 núcleos, o que traduziria como 17 processos ... ou só poderia ser 1 traduzindo como 3 processos. Mexer com ele & veja o que acontece.

Você pode querer definir um número físico para isso se quiser que dois aplicativos sejam executados igualmente bem sem ver muito atraso causado pelo outro.

    
por 14.12.2011 / 17:44