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

115

Nous avons un serveur qui sert un fichier html.

À l'heure actuelle, le serveur a 2 processeurs et 2 Go de RAM. À partir de blitz.io, nous obtenons environ 12k connexions par minute et n'importe où à partir de 200 délais d'attente en 60 secondes avec 250 connexions simultanées par seconde.

worker_processes  2;

events {
 worker_connections 1024;
}

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

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

ablemike
la source

Réponses:

188

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: Optimiser nginx pour les charges de trafic élevées

Bulat
la source
14
Je pense que l'équation fournie pour le nombre total d'utilisateurs par seconde est fausse. Au lieu de cela, le nombre moyen d'utilisateurs servis par seconde devrait être = worker_processes * worker_connections / (keepalive_timeout * 2) Par conséquent, le fichier de configuration ci-dessus peut serveur ~ 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 souhaitez pas le modifier.
Ethan
2
@Ethan, pourquoi devrait-il être divisé par 2? Si chaque seconde, nous obtenons 100 nouvelles connexions et que le délai d'expiration est de 5, puis strting avec la sixième seconde, nous aurons constamment 5 * 100 connexions qui ne sont toujours pas terminées côté serveur. nous pouvons avoir moins si certains utilisateurs sont des connexions interrompues lui
Bulat
3
cette formule ne fonctionne pas si keepalive est défini sur 0s (désactivé)
Tilo
5
Chaque connexion nécessite 2 descripteurs de fichiers, même pour les fichiers statiques comme images / JS / CSS. C'est comme 1 pour la connexion du client et le 2ème pour ouvrir le fichier statique. Par conséquent, il est plus sûr de modifier worker_rlimit_nofile = 2 * worker_connections.
Ethan
4
Utilisez worker_rlimit_nofile mais il faut également appeler «ulimit -n» pour définir la valeur du nombre de fichiers ouverts par processus. Ceci est mieux fait dans le script init.
Ethan