Nginx静态文件服务10Gbps服务器的性能问题



我使用Nginx在专用服务器上提供静态文件。服务器没有网站,它只是一个文件下载服务器。文件大小从MB到GB不等。

以前我在unintered.com上有8台500Mbps的专用服务器。每台都表现得很好。

我想从FDCServers购买一台10Gbps的服务器。因为一台服务器比多台服务器更容易管理。

以下是服务器的规格:

双Xeon E5-2640(15M缓存,2.50 GHz,7.20 GT/s Intel®QPI)-24核128 GB内存10 Gbit/s网络未计量Ubuntu 14.04 LTS1.5 TB SATA

但我的新巨型服务器的速度不会超过500到600 Mbps。我安装了nload来监控流量和上传/下载速度。它的报告与以前的unintered.com服务器几乎相同。

然后我想这可能是由于SATA硬盘的读取速率限制。

所以我购买并安装了3 X 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-2GB/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上,然后你就可以独立于物理磁盘了。

只有到那时,你才会知道什么需要调整。。。

最新更新