118 votes

Réglage du worker_process de nginx pour obtenir 100k hits par minute

Nous avons un serveur qui sert un fichier html.

Actuellement, le serveur est équipé de deux processeurs et de 2 Go de mémoire vive. À partir de blitz.io, nous obtenons environ 12 000 connexions par minute et entre 200 timeouts dans ces 60 secondes avec 250 connexions simultanées par seconde.

worker_processes  2;

events {
 worker_connections 1024;
}

Si j'augmente le délai d'attente, le temps de réponse commence à s'allonger au-delà d'une seconde.

Que puis-je faire d'autre pour en tirer plus de jus ?

197voto

Bulat Points 954

Fichier de configuration :

worker_processes  4;  # 2 * Number of CPUs

events {
    worker_connections  19000;  # It's the key to high performance - have a lot of connections available
}

worker_rlimit_nofile    20000;  # Each connection needs a filehandle (or 2 if you are proxying)

# Total amount of users you can serve = worker_processes * worker_connections

Plus d'informations : Optimisation de nginx pour les charges de trafic élevées

15 votes

Je pense que l'équation fournie pour le nombre total d'utilisateurs par seconde est fausse. Au lieu de cela, la quantité moyenne d'utilisateurs servis par seconde devrait être = worker_processes * worker_connections / (keepalive_timeout * 2) Par conséquent, le fichier de conf ci-dessus peut servir ~7.6K connexions par seconde, ce qui est bien au-dessus de ce dont @ablemike a besoin. Cependant, worker_rlimit_nofile est une bonne directive à utiliser, si ulimit est restrictif et que vous ne voulez pas le modifier.

2 votes

@Ethan, pourquoi devrait-il être divisé par 2 ? Si toutes les secondes nous recevons 100 nouvelles connexions, et que le timeout est de 5, alors en ajoutant la sixième seconde, nous aurons constamment 5*100 connexions qui ne sont toujours pas terminées du côté du serveur. Nous pouvons en avoir moins si certains utilisateurs abandonnent eux-mêmes leurs connexions.

3 votes

Cette formule ne fonctionne pas si keepalive est réglé sur 0s (désactivé).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X