Nginx servindo arquivos estáticos muito lentamente

Nginx servindo arquivos estáticos muito lentamente

Perguntei isso no Stack Overflow, mas talvez seja mais uma pergunta para a equipe do SF.

Então, houve muitos artigos comoEsterecentemente, exaltando as virtudes do Django Static Generator quando usado em combinação com um servidor Web front-end leve. Faz muito sentido para mim.

No entanto, não obtenho nada parecido com os resultados relatados por outras pessoas – milhares de solicitações por segundo – e não sei por que isso acontece.

Estou me preparando para lançar uma reformulação do site do meu jornal. Eu consegui usar o Static Generator em um servidor de teste agora. E quando executo o Apache Bench em uma página estática específica, obtenho resultados bastante ruins:

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

Estou observando topo servidor enquanto o cerco está em andamento e posso ver que ele não está atingindo o Apache ou o servidor de banco de dados. Na verdade, ele está servindo a página em cache. O Nginx está em execução, mas nunca ultrapassa 2% de uso de memória. A CPU permanece cerca de 95% ociosa.

O que estou fazendo de errado? Posso ter configurado mal o nginx de alguma forma? Meu arquivo de configuração principal está colado abaixo; a inclusão específica deste site é praticamente uma cópia carbono da configuração de exemplo noPágina inicial do gerador estático. Estou executando o Ubuntu 9.10 em uma fatia Slicehost 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/*;
}

Responder1

Você pode aumentar o desempenho do nginx apenas adicionando as próximas opções à configuração:

   http {

      open_file_cache max=1000 inactive=300s;
      open_file_cache_valid 360s;
      open_file_cache_min_uses 2;
      open_file_cache_errors off;

    }

Responder2

Na verdade, seu nginx está servindo arquivos a uma taxa razoável. De uma máquina externa, consegui 371 solicitações por segundo em abum dos arquivos CSS daquela página.

Você está testando a página inteira, o que significa que está fazendo 22 solicitações nela. Consegui receber cerca de 40 solicitações por segundo durante o benching http://journal.streamlister.com/news/.

Provavelmente poderia ser mais rápido, mas você está em um VPS onde compartilha CPU e E/S de disco com outras pessoas.

Responder3

Eu teria que concordar com gekkz que pode ser o seu VPS. Acabei de fazer um teste abdominal em um dos meus arquivos estáticos e obtive:

Total transferido: 11203000 bytes
HTML transferido: 10861000 bytes
Solicitações por segundo: 674,14[#/seg] (média)
Tempo por solicitação: 14,834 [ms] (média)
Tempo por solicitação: 1,483 [ms] (média, em todas as solicitações simultâneas)
Taxa de transferência: 7.375,39 [Kbytes/seg] recebidos

este era um arquivo css. Também estou em um VPS do linode.com. Uma postagem recente no blog deles mostraalguns testesfeito em vários VPSs que possam ser de interesse.

Acabei de olhar e meu arquivo de configuração é apenas um pouco diferente. Tenho 2 procs configurados, 1024 conexões e tenho keep_alive ativado.

Responder4

Seus parâmetros de teste são o problema, eu acho. Com uma simultaneidade máxima de 10, mas cada página levando cerca de 500 ms no total para ser entregue, você verá no máximo cerca de 20 solicitações por segundo.

Você testou com níveis de simultaneidade mais altos usando ab? (Observe que ab é uma ferramenta realmente simplista para testar a carga de um aplicativo da Web e só pode ser considerada um "microbenchmark"). Você também deve fazer benchmarking de uma máquina diferente, é claro, talvez mais de uma outra máquina se a largura de banda ou a memória forem um problema.

informação relacionada