
Pregunté esto en Stack Overflow, pero tal vez sea más una pregunta para el equipo de SF.
Entonces ha habido muchos artículos comoÉsterecientemente, ensalzando las virtudes de Django Static Generator cuando se usa en combinación con un servidor web front-end liviano. Tiene mucho sentido para mí.
Sin embargo, no obtengo nada parecido a los resultados que otras personas informan (miles de solicitudes por segundo) y no sé por qué.
Me estoy preparando para lanzar un rediseño del sitio web de mi periódico. Lo tengo usando Static Generator en un servidor de prueba en este momento. Y cuando ejecuto Apache Bench en una página estática particular, obtengo resultados bastante miserables:
ab -c 10 -n 1000 http://journal.streamlister.com/news/
Concurrency Level: 10
Time taken for tests: 53.011 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 21281212 bytes
HTML transferred: 21067360 bytes
Requests per second: 18.86 [#/sec] (mean)
Time per request: 530.107 [ms] (mean)
Time per request: 53.011 [ms] (mean, across all concurrent requests)
Transfer rate: 392.04 [Kbytes/sec] received
Estoy observando top
el servidor mientras el asedio está activo y puedo ver que no afecta a Apache ni al servidor de la base de datos en absoluto. De hecho, está sirviendo la página almacenada en caché. Nginx se está ejecutando, pero nunca supera el 2% de uso de memoria. La CPU permanece inactiva en un 95 por ciento.
¿Qué estoy haciendo mal? ¿Podría haber configurado mal nginx de alguna manera? Mi archivo de configuración principal está pegado a continuación; la inclusión específica de este sitio es prácticamente una copia al carbón de la configuración de muestra en elPágina de inicio del generador estático. Estoy ejecutando Ubuntu 9.10 en un segmento Slicehost de 256k.
user not_my_real_username;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 8192;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
keepalive_timeout 0;
#keepalive_timeout 65;
tcp_nodelay on;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Respuesta1
Puede aumentar el rendimiento de nginx simplemente agregando las siguientes opciones a la configuración:
http {
open_file_cache max=1000 inactive=300s;
open_file_cache_valid 360s;
open_file_cache_min_uses 2;
open_file_cache_errors off;
}
Respuesta2
Su nginx en realidad sirve archivos a un precio razonable. Desde una máquina externa, pude obtener 371 solicitudes por segundo en ab
uno de los archivos CSS de esa página.
Estás probando toda la página, lo que significa que estás realizando 22 solicitudes en ella. Pude recibir alrededor de 40 solicitudes por segundo mientras hacía el banco http://journal.streamlister.com/news/
.
Probablemente podría ser más rápido, pero estás en un VPS donde compartes CPU y E/S de disco con otros.
Respuesta3
Tendría que estar de acuerdo con gekkz en que podría ser tu VPS. Acabo de hacer una prueba ab en uno de mis archivos estáticos y obtuve:
Total transferido: 11203000 bytes
HTML transferido: 10861000 bytes
Solicitudes por segundo: 674,14[#/seg] (media)
Tiempo por solicitud: 14,834 [ms] (media)
Tiempo por solicitud: 1,483 [ms] (media, en todas las solicitudes simultáneas)
Velocidad de transferencia: 7375,39 [Kbytes/seg] recibida
este era un archivo css. También estoy en un VPS de linode.com. Una publicación de blog reciente de ellos muestraalgunas pruebasrealizado en varios VPS que podrían ser de interés.
Acabo de mirar y mi archivo de configuración es solo un poco diferente. Tengo 2 configuraciones de procs, 1024 conexiones y tengo keep_alive activado.
Respuesta4
Creo que sus parámetros de prueba son el problema. Con una concurrencia máxima de 10, pero cada página tarda ~500 ms en total en entregarse, verá como máximo unas 20 solicitudes por segundo.
¿Ha probado con niveles de concurrencia más altos usando ab? (Tenga en cuenta que ab es una herramienta realmente simplista para probar la carga de una aplicación web y, en realidad, solo puede considerarse un "microbenchmark"). Por supuesto, también debería realizar la evaluación comparativa desde una máquina diferente, quizás más de una máquina si el ancho de banda o la memoria son un problema.