Ajuste de nginx worker_process para obtener 100k hits por minuto

115

Tenemos un servidor que sirve un archivo html.

En este momento, el servidor tiene 2 CPU y 2 GB de RAM. Desde blitz.io, estamos obteniendo alrededor de 12k conexiones por minuto y entre 200 tiempos de espera en esos 60 segundos con 250 conexiones simultáneas por segundo.

worker_processes  2;

events {
 worker_connections 1024;
}

Si aumento el tiempo de espera, el tiempo de respuesta comienza a aumentar más allá de un segundo.

¿Qué más puedo hacer para exprimir más jugo de esto?

capazmike
fuente

Respuestas:

188

Archivo de configuración:

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

más información: Optimización de nginx para cargas de tráfico elevado

Bulat
fuente
14
Creo que la ecuación proporcionada para la cantidad total de usuarios por segundo es incorrecta. En cambio, la cantidad promedio de usuarios atendidos por segundo debería ser = worker_processes * worker_connections / (keepalive_timeout * 2) Por lo tanto, el archivo de configuración anterior puede servidor ~ 7.6K conexiones por segundo, que está muy por encima de lo que @ablemike necesita. Sin embargo, worker_rlimit_nofile es una buena directiva para usar, si ulimit es restrictivo y no quieres modificarlo.
Ethan
2
@ Ethan, ¿por qué debería dividirse entre 2? Si cada segundo obtenemos 100 conexiones nuevas, y el tiempo de espera es 5, comenzando con el sexto segundo, tendremos constantemente 5 * 100 conexiones que todavía no terminan en el lado del servidor. es posible que tengamos menos si algunos usuarios son conexiones abortadas él mismo
Bulat
3
esa fórmula no funciona si keepalive se establece en 0s (deshabilitado)
Tilo
5
Cada conexión necesita 2 identificadores de archivo incluso para archivos estáticos como imágenes / JS / CSS. Este es el 1 para la conexión del cliente y el 2 para abrir el archivo estático. Por lo tanto, es más seguro cambiar worker_rlimit_nofile = 2 * worker_connections.
Ethan
4
Use worker_rlimit_nofile pero también se debe llamar a 'ulimit -n' para establecer el valor de conteo de archivos abiertos por proceso. Esto se hace mejor en el script de inicio.
Ethan