2009-08-11 5 views
14

La documentation nginx dit

max_clients = worker_processes * worker_connections 

mais comment le facteur keepalive dans tout cela? J'ai ma configuration avec 2 worker_processes et 8192 worker_connections; cela signifie que je peux théoriquement gérer un maximum de 16384 connexions simultanées. Extraire 16384 flux de données en même temps est gigantesque, mais si j'ai un keepalive_timeout des années 60 alors avec chaque client accaparant une connexion pendant 1 minute ce nombre a une signification complètement différente. Lequel est-ce?

La variable de connexion $ qui peut être utilisée avec la directive log_format est connectée à tout cela. J'ai défini le format du journal suivant ainsi je pourrais analyser les performances du serveur:

log_format perf '$request_time $time_local $body_bytes_sent*$gzip_ratio $connection $pipe $status $request_uri'; 

Cette variable de connexion $ rapporte environ 11-12000000 connexions! Je ne suis pas un math majeur, mais évidemment ce nombre est bien supérieur à worker_processes * worker_connections. Alors qu'est-ce que c'est censé représenter?

En bref, j'essaie de comprendre comment pour déterminer une bonne valeur pour worker_connection.

Répondre

9

$ connexion est un compteur, pas le nombre total de connexions utilisées en ce moment. Donc, il est destiné à grandir.

connexions Keepalive ne peuvent pas être mis au rebut, la chambre est worker_processes * worker_connections - Connexions keepalive

+0

Un compteur! Maintenant que vous le dites, je peux voir le motif. Merci d'avoir répondu à une question aussi obscure. – Daniel

1

imaginez l'image entière: premier client se connecte à vous, obtient un fichier, puis navigateur maintient la connexion pendant 60 secondes. un autre client se connecte, obtient, et conserve sa connexion aussi. à la fin de la première minute, vous pouvez avoir (dans le pire des cas) tous les clients demandés quelque chose dans les 60 dernières secondes en gardant leurs connexions ouvertes

ainsi, dans le pire des cas, vous servirez "worker_processes * worker_connections/keep_alive "connexions en une seconde, soit environ 260 pour vos numéros. Si vous avez besoin de plus, vous devez allouer plus de connexions - juste pour servir keepalives: lisez ma réponse dans Tuning nginx worker_process to obtain 100k hits per min

afaik nginx peut contenir 10k de connexions inactives (keepalived) dans 2.5mb de mémoire, augmentant ainsi les connexions de travailleur est bon marché, très pas cher . Je pense que le goulot d'étranglement principal ici peut être votre OS lui-même

Questions connexes