J'essaie d'augmenter le nombre de connexions simultanées que mon serveur peut gérer.
$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
La configuration de Nginx contient les lignes suivantes :
worker_processes 4; # or 8
worker_rlimit_nofile 60000;
events {
worker_connections 1024;
}
Il existe également un backend Python asyncio HTTP dormant (dormant à l'infini) utilisé via upstream.
Et après quelques secondes de test de charge :
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
alors que
$netstat -anvpt | wc -l
1156 # or twice bigger if there is 8 worker processes.
htop
montre qu'il y a 4 (ou 8) processus de travail de nginx et seulement 50% d'un cœur de CPU utilisé (alors que 3 autres cœurs sont inactifs). Un examen plus approfondi de la netstat
montre que seuls deux processus de travailleur sont utilisés et que chacun d'entre eux n'a pas pris plus de la moitié des 1024 connexions autorisées (entre les clients et nginx et entre nginx et l'amont).
En outre, nginx et le backend fonctionnent à l'intérieur de docker
des conteneurs.
UPD : Si j'augmente worker_connections
jusqu'à 10240, je traiterai beaucoup plus de clients et les performances du CPU seront un goulot d'étranglement. Mais la question est de savoir pourquoi je suis confronté au message 1024 worker_connections are not enough
tout en ayant encore 2 ou 6 travailleurs inactifs.