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.
Tags connection nginx load-testing