Nginx 提供静态文件的速度太慢

Nginx 提供静态文件的速度太慢

我在 Stack Overflow 上问过这个问题,但也许这更像是 SF 团队的问题。

因此有很多文章这个最近,我赞扬了 Django Static Generator 与轻量级前端 Web 服务器结合使用时的优点。这对我来说非常有意义。

然而,我没有得到其他人报告的结果——每秒数千个请求——而且我不知道为什么会这样。

我正准备重新设计我报社的网站。我现在在测试服务器上使用静态生成器进行设计。当我在某个静态页面上运行 Apache Bench 时,结果非常糟糕:

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

在围攻期间,我正在观察top服务器,我发现它根本没有影响 Apache 或数据库服务器。因此,它实际上正在提供缓存页面。Nginx 正在运行,但内存使用率从未超过 2%。CPU 仍然处于大约 95% 的空闲状态。

我做错了什么?我可能以某种方式错误配置了 nginx 吗?我的主要配置文件粘贴在下面;特定于此站点的包含内容几乎是示例配置的副本静态生成器主页。我在 Slicehost 256k 分片上运行 Ubuntu 9.10。

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/*;
}

答案1

您可以提高 nginx 性能,只需在配置中添加以下选项:

   http {

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

    }

答案2

您的 nginx 确实以合理的速率提供文件。从外部机器,我每秒能够针对ab该页面上的一个 CSS 文件获得 371 个请求。

您正在测试整个页面,这意味着您在该页面上发出 22 个请求。我在进行基准测试时每秒能够获得大约 40 个请求http://journal.streamlister.com/news/

它可能更快,但您在 VPS 上与其他人共享 CPU 和磁盘 I/O。

答案3

我不得不同意 gekkz 的观点,这可能是你的 VPS 的问题。我刚刚对我的一个静态文件进行了 ab 测试,结果如下:

总共传输:11203000 字节
HTML 传输:10861000 字节
每秒请求数:674.14[#/秒](平均)
每个请求的时间:14.834 [毫秒](平均)
每个请求的时间:1.483 [毫秒](平均,所有并发请求)
传输速率:已接收 7375.39 [千字节/秒]

这是一个 css 文件。我也在 linode.com 的 VPS 上。他们最近的一篇博客文章显示一些测试在可能感兴趣的各种 VPS 上完成。

我刚刚查看了一下,我的配置文件只有一点不同。我设置了 2 个进程,1024 个连接,并且我已打开 keep_alive。

答案4

我认为您的测试参数有问题。最大并发数为 10,但每页总共需要约 500 毫秒才能完成,因此您每秒最多会看到约 20 个请求。

您是否使用 ab 测试过更高的并发级别?(请注意,ab 是一种用于对 Web 应用程序进行负载测试的非常简单的工具,实际上只能被视为“微基准测试”)。当然,您还应该从另一台机器进行基准测试,如果带宽或内存是一个问题,也许不止一台其他机器。

相关内容