worker_connections não são suficientes enquanto os trabalhadores ociosos

2

Eu tento aumentar o número de conexões simultâneas que meu servidor pode manipular.

$uname -a
Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux

$ulimit -Sn
65536

$ulimit -Hn
65536

O Nginx config tem as próximas linhas:

worker_processes  4; # or 8
worker_rlimit_nofile 60000;

events {
    worker_connections  1024;
}

Além disso, há um back-end asyncio python sonolento (dorme infinitamente) usado via upstream.

E após alguns segundos de testes de carga:

2016/11/03 05:13:44 [alert] 15#15: 1024 worker_connections are not enough
2016/11/03 05:13:44 [alert] 15#15: 1024 worker_connections are not enough

enquanto

$netstat -anvpt | wc -l  
1156   # or twice bigger if there is 8 worker processes.

htop mostra que há 4 (ou 8) processos de trabalho nginx e apenas 50% de 1 núcleo de CPU usado (enquanto outros 3 núcleos estão inativos). Uma investigação mais detalhada da saída netstat mostra que apenas dois processos de trabalho são usados e que ambos não receberam mais do que metade de 1024 conexões permitidas (como de clientes para o nginx a partir do nginx para o upstream).

Além disso, o nginx e o backend funcionam dentro de docker containers.

UPD: Se eu aumentar worker_connections até 10240, gerirei muito mais clientes e o desempenho da CPU será um gargalo. Mas a questão é por que eu enfrentei a mensagem 1024 worker_connections are not enough enquanto ainda tenho 2 ou 6 trabalhadores ociosos.

    
por Ivan Velichko 03.11.2016 / 06:38

0 respostas