我试图找出完全由 EBS 支持的 AWS 服务器上的 nginx 的正确调整。基本问题是,当下载约 100MB 的静态文件时,我看到的下载速率一致为约 60K/s。如果我使用 scp 从 AWS 服务器复制相同的文件,我看到的速率约为 1MB/s。(所以,我不确定 EBS 是否会在这里发挥作用)。
最初,我使用开箱即用的配置运行 nginx(对于 CentOS 6.x)。但为了加快速度,我尝试了各种调整参数,但无济于事——速度基本保持不变。
这是目前我的配置中的相关片段:
location /download {
root /var/www/yada/update;
disable_symlinks off;
autoindex on;
# Transfer tuning follows
aio on;
directio 4m;
output_buffers 1 128k;
}
最初,这些调整设置是:
sendfile on;
tcp_nopush on;
tcp_nodelay on;
请注意,我并不是要针对大量流量进行优化。在任何给定时间可能只有一个客户端下载。AWS 服务器是一个具有 617MB 内存的“微型”实例。无论如何,scp 可以以 ~1MB/s 的速度下载这一事实让我相信 HTTP 应该能够匹配或超过该吞吐量。
任何帮助表示赞赏。
[更新] 附加信息。在下载运行时运行“顶部”命令,我得到:
top - 07:37:33 up 11 days, 1:56, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 63 total, 1 running, 62 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
'iostat' 显示:
Linux 3.2.38-5.48.amzn1.x86_64 04/03/2013 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.03 0.03 0.02 99.89
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
xvdap1 0.23 2.66 8.59 2544324 8224920