Nginx Envio de arquivos estáticos de maneira muito lenta

4

Eu perguntei isso no Stack Overflow, mas talvez seja mais uma pergunta para a equipe da SF.

Portanto, há muitos artigos como este recentemente, 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 recebo nada como os resultados que outras pessoas estão relatando - milhares de solicitações por segundo - e não sei por que isso acontece.

Estou me preparando para lançar um novo design do site do meu jornal. Eu tenho isso usando o Static Generator em um servidor de teste agora. E quando eu executo o Apache Bench em uma página estática específica, obtenho resultados bastante infelizes:

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 assistindo top no servidor enquanto o cerco está ligado, e vejo que ele não está atingindo o Apache nem o servidor de banco de dados. Então, na verdade, está servindo a página em cache. O Nginx está em execução, mas nunca fica acima de 2% de uso de memória. A CPU permanece cerca de 95% ociosa.

O que estou fazendo de errado? Eu poderia ter configurado o nginx de alguma forma? Meu arquivo de configuração principal é colado abaixo; A inclusão específica para este site é basicamente uma cópia da amostra da configuração na página inicial do Static Generator . 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/*;
}
    
por hanksims 18.01.2010 / 17:19

4 respostas

3

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;

    }
    
por 03.02.2010 / 23:13
1

Seu nginx está servindo arquivos a uma taxa razoável. De uma máquina externa, consegui 371 solicitações por segundo com ab em um dos arquivos CSS da página.

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

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

    
por 18.01.2010 / 17:42
1

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

Total transferido: 11203000 bytes
HTML transferido: 10861000 bytes
Solicitações por segundo: 674,14 [# / s] (média)
Tempo por pedido: 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: 7375,39 [Kbytes / seg] recebidos

este foi um arquivo css. Eu também estou em um VPS do linode.com. Uma postagem recente no blog deles mostra alguns testes feitos em vários VPSs que podem ser de interesse.

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

    
por 22.01.2010 / 23:04
0

Seus parâmetros de teste são o problema que eu acho. Com uma concorrência máxima de 10, mas cada página levando aproximadamente 500 ms para entregar, 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 o ab é uma ferramenta realmente simplista para o teste de carga de um aplicativo da Web, e só pode realmente ser considerado um "microbenchmark"). Você também deve fazer o benchmarking de uma máquina diferente, talvez mais do que uma outra máquina, se a largura de banda ou a memória forem um problema.

    
por 18.02.2010 / 05:50

Tags