Nginx的服务静态文件的方式太慢了

我在Stack Overflow上问过这个问题,但是对于SF机组来说,这也许是一个问题。

所以最近有很多这样的文章,颂扬Django静态生成器的优点,当它与一个轻量级的前端Web服务器结合使用时。 这对我来说很有意义。

然而,我没有得到其他人报告的结果 – 每秒数千次的请求 – 我不知道这是为什么。

我准备对报纸的网站进行重新devise。 我已经在testing服务器上使用了Static Generator。 当我在一个特定的静态页面上运行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或数据库服务器。 实际上,它就是为caching页面服务的。 Nginx正在运行,但它永远不会超过2%的内存使用量。 CPU保持约95%空闲。

我究竟做错了什么? 我可以以某种方式错误地configurationnginx吗? 我的主要configuration文件粘贴在下面; 这个网站的特定包含几乎是静态生成器主页上的示例configuration的拷贝副本。 我在Slicehost 256k slice上运行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/*; } 

您可以增加nginx性能,只需添加下一个选项来configuration:

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

你的nginx实际上是以合理的速度提供文件。 从外部机器上,我能够获得每秒371个请求与该网页上的一个CSS文件。

你正在testing整个页面,这意味着你正在提出22个请求。 当我修正http://journal.streamlister.com/news/时,我能够每秒处理40个请求。

它可能会更快,但你在一个VPS,你与其他人共享CPU和磁盘I / O。

我不得不同意gekkz这可能是你的VPS。 我刚刚对我的一个静态文件做了一个abtesting,得到:

总传输量:11203000字节
HTML传输:10861000字节
每秒请求数:674.14 [#/秒](平均值)
每个请求的时间:14.834 [ms](平均值)
每个请求的时间:1.483 [ms](意味着跨所有并发请求)
传输速率:收到7375.39 [千字节/秒]

这是一个CSS文件。 我也在linode.com的VPS上。 他们最近的一篇博客文章展示了对可能感兴趣的各种VPS进行的一些testing 。

我只是看,我的configuration文件只是有点不同。 我有2个特效设置,1024个连接,我有keep_alive打开。

你的testing参数是我想的问题。 最大并发数为10,但每个页面总共需要约500毫秒的时间才能完成,最多可以看到每秒约20个请求。

你使用ab来testing更高的并发级别吗? (请注意,ab是一个非常简单的负载testingWeb应用程序的工具,只能真正被认为是“微基准”)。 当然,如果带宽或内存是问题,也应该从另外一台机器进行基准testing,或许多台机器进行基准testing。