我正在使用 Nginx 在专用服务器上提供静态文件。 该服务器没有网站,它只是一个文件下载服务器。文件大小范围从 MB 到 GB。
之前我在 unmetered.com 上有 8 台 500 Mbps 的专用服务器。他们每个人的表现都很棒。
我想从 FDCServers 购买一台 10Gbps 服务器。因为一台服务器比多台服务器更容易管理。
以下是服务器规格:
双 Xeon E5-2640(15M 高速缓存,2.50 GHz,7.20 GT/s Intel® QPI)- 24 核 128 GB 内存 10 Gbit/s 网络不计量 Ubuntu 14.04 LTS 1.5TB SATA
但是我的新巨型服务器的速度不超过 500 到 600 Mbps。我安装了 nload 来监控流量和上传/下载速度。它的报告几乎与以前的 unmetered.com 服务器相同。
然后我想可能是SATA硬盘读取速率限制的原因。
因此,我在新的强大服务器中购买并安装了 3 个 240 GB SSD 驱动器。
我将文件移至 SSD 驱动器并下载以进行测试。速度还是不好。我的速度只有 250 到 300 Kbps。而它应该给我至少 2Mbps(这是我在 Nginx 配置文件中放置的每个 IP 的速度限制)。
然后我搜索了千兆位以太网调整设置。发现需要针对 10Gbps 网络调整几个 sysctl 设置。
http://www.nas.nasa.gov/hecc/support/kb/Optional-Advanced-Tuning-for-Linux_138.html
我实现了它们,但吞吐量仍然与我之前的 500Mbps 服务器相同。
您能否帮助提高该服务器的网络吞吐量。我询问了 FDCServer 支持团队,他们确认他们的服务器可以轻松提供 3 到 5 Gbps,但他们无法帮助我调整它。
经过所有调整和设置后,我最多只能获得 700Mbit。
如果您需要更多详细信息,请告诉我。
执行测试内存:
适用于 DDR3 1333MHz PC10600
$ dd if=/dev/zero bs=1024k count=512 > /dev/null
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 0.0444859 s, 12.1 GB/s
测试磁盘io:
$ pv ./100MB.bin > /dev/null
100MiB 0:00:00 [3.36GiB/s] [=================================================================================================================================================================================>] 100%
使用帮助管道测试CPU速度:
$ dd if=/dev/zero bs=1024k count=512 2> /dev/null| pv > /dev/null
512MiB 0:00:00 [2.24GiB/s] [ <=> ]
从本地主机下载 nginx 的速度应该约为 1.5-2 GB/s
检查:
$ wget -O /dev/null http://127.0.0.1/100MB.bin
--2014-12-10 09:08:57-- http://127.0.0.1:8080/100MB.bin
Connecting to 127.0.0.1:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: ‘/dev/null’
100%[=======================================================================================================================================================================================>] 104,857,600 --.-K/s in 0.06s
2014-12-10 09:08:57 (1.63 GB/s) - ‘/dev/null’ saved [104857600/104857600]
检查此解决方案。
删除线条:
output_buffers 1 512k;
aio on;
directio 512;
并改变
sendfile off;
tcp_nopush off;
tcp_nodelay off;
到
sendfile on;
tcp_nopush on;
tcp_nodelay on;
祝你好运
我认为您需要拆分问题并独立测试以确定真正的问题 - 猜测是磁盘问题并在新磁盘上花费数百或数千美元(如果是网络问题)是没有用的。你有太多变量,无法随机改变 - 你需要分而治之。
1) 要测试磁盘,请使用磁盘性能工具或旧式
dd
来测量吞吐量(以字节/秒为单位)和延迟(以毫秒为单位)。从磁盘读取数据块并写入/dev/null
以测试读取速度。从 /dev/zero
读取数据块并写入磁盘以测试写入速度 - 如有必要。
顺便问一下,您的磁盘是否已进行 RAID 处理?并分为多少个控制器?
2) 要测试网络,请使用
nc
(又名 netcat
)并冲击网络以查看测量的吞吐量和延迟。从 /dev/zero
读取数据块并使用 nc
通过网络发送。从网络读取数据块并丢弃到/dev/null
以在另一个方向进行测试。
3)要测试您的 nginx 服务器,请将一些静态文件放在 RAMdisk 上,然后您将独立于物理磁盘。
只有这样你才会知道什么需要调整...
我也有同样的问题。在 1 Gbit 时,文件下载速度高达 20 Mbps/秒。更改
sendfile_max_chunk
参数后,速度变为最大。
改变:
sendfile_max_chunk 256k;
致:
sendfile_max_chunk 16M;