2009-08-11 15 views
14

La documentación nginx dice

max_clients = worker_processes * worker_connections 

Pero, ¿cómo el factor de mantenimiento de conexión en todo esto? Tengo mi configuración de configuración con 2 worker_processes y 8192 worker_connections; eso significa que teóricamente puedo manejar un máximo de 16384 conexiones simultáneas. Impulsar 16384 flujos de datos al mismo tiempo es enorme, pero si tengo un keepalive_timeout de 60, entonces con cada cliente acaparando una conexión durante 1 minuto, ese número tiene un significado completamente diferente. ¿Cuál es?

Conectado a todo esto está la variable $ connection que se puede usar con la directiva log_format. He definido el siguiente formato de registro para que pudiera analizar el rendimiento del servidor:

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

esa variable $ conexión está reportando alrededor de 11-12 millones de conexiones! No soy matemático, pero obviamente ese número es mucho más alto que worker_processes * worker_connections. Entonces, ¿qué se supone que debe representar?

En resumen, estoy tratando de averiguar cómo para determinar un buen valor para worker_connection.

Respuesta

9

$ connection es un contador, no el número total de conexiones usadas en este momento. Por lo tanto, está destinado a crecer.

conexiones de mantenimiento de conexión no pueden ser descartados, así que la habitación es worker_processes * worker_connections - conexiones de mantenimiento de conexión

+0

A counter! Ahora que lo dices, puedo ver el patrón. Gracias por responder una pregunta tan oscura. – Daniel

1

imagínense todo el cuadro: el primer cliente se conecta a usted, consigue un archivo y luego navegador mantiene la conexión durante 60 segundos. otro cliente se conecta, obtiene y mantiene su conexión también. al final del primer minuto, es posible que (en el peor de los casos) todos los clientes le hayan solicitado algo en los últimos 60 segundos manteniendo sus conexiones abiertas

, en el peor de los casos, servirá "worker_processes * worker_connections/keep_alive "conexiones en un segundo, es decir, alrededor de 260 para sus números. si necesita más, debe asignar más conexiones, solo para servir keepalives: lea mi contestador en Tuning nginx worker_process to obtain 100k hits per min

afaik nginx puede contener 10k de conexiones inactivas (keepalived) en 2.5mb de memoria, por lo que aumentar las conexiones_de_trabajo es barato, muy barato . Creo que el principal cuello de botella aquí puede ser su propio sistema operativo

Cuestiones relacionadas