在AWS EBS支持的服务器上,nginx大型静态文件服务速度很慢

bre*_*ttw 5 centos nginx amazon-web-services

我正在尝试在完全由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;
}
Run Code Online (Sandbox Code Playgroud)

最初,这些调整设置是:

sendfile       on;
tcp_nopush     on;
tcp_nodelay    on;
Run Code Online (Sandbox Code Playgroud)

请注意,我不是要为大量流量进行优化.在任何给定时间可能只有一个客户端下载.AWS服务器是一个具有617MB内存的"微型"实例.无论如何,scp可以以~1MB/s的速度下载,这让我相信HTTP应该能够匹配或超过吞吐量.

任何帮助表示赞赏.

[更新] 补充信息.在下载运行时运行'top'命令,我得到:

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
Run Code Online (Sandbox Code Playgroud)

和'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
Run Code Online (Sandbox Code Playgroud)

Jee*_*gre 2

默认情况下,scp 会比 HTTP 连接快得多。我有一个建议给你。如果您提供静态文件,我更喜欢使用 S3 和 Cloud front。这使得它更快。在文件传输中很难获得更好的性能。