我在 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 应用程序进行负载测试的非常简单的工具,实际上只能被视为“微基准测试”)。当然,您还应该从另一台机器进行基准测试,如果带宽或内存是一个问题,也许不止一台其他机器。