2014-09-06 77 views
1

我正在使用Nginx服务专用服务器上的静态文件。 服务器没有网站,它只是一个文件下载服务器。文件大小范围从MB到GB。Nginx静态文件服务10Gbps服务器性能问题

以前我在unmetered.com有8个500Mbps的专用服务器。他们每个人都表现出色。

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

下面是服务器的功能:

双至强E5-2640(15M缓存,2.50千兆赫,7.20 GT /秒英特尔QPI) - 24芯 128 GB RAM 10 Gbit/s的网络限速无限 Ubuntu的14.04 LTS 1.5 TB SATA

但是我的新巨型服务器速度超过500 Mbps到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。

让我知道你是否需要更多的细节。

+0

硬盘都没有遭到袭击。 – 2014-09-06 09:54:45

+0

linux内核版本? – Anatoly 2014-09-06 11:20:59

+0

3.13.0-35-generic – 2014-09-06 13:24:08

回答

2

执行测试内存:

为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的

cheking:

$ 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; 

好运

+0

非常感谢。测试帮助了很多。但是我发现aio更适合静态文件共享。 – 2015-02-12 11:34:27

2

我认为你需要分离问题并独立测试以确定真正的问题 - 猜测它是磁盘,并且在新磁盘上花费数百或数千,如果它是网络是没有用的。你有太多变数只是随机变化 - 你需要分而治之。

1)要测试磁盘,请使用磁盘性能工具或旧的dd以毫秒为单位来测量吞吐量(以字节/秒为单位)和延迟。从磁盘读取数据块并写入/dev/null以测试读取速度。从/dev/zero读取数据块并写入磁盘以测试写入速度 - 如有必要。

您的磁盘RAID的方式?并分解了多少个控制器?

2)要测试网络,请使用nc(又名。netcat),并对网络进行冲突以查看您测量的吞吐量和延迟。从/dev/zero读取数据块并通过网络发送nc。从网络读取数据块并丢弃到/dev/null进行另一方向的测试。

3)为了测试你的nginx服务器,把一些静态文件放在RAMdisk上,然后你将独立于物理磁盘。

只有这样,你知道需要调整......

+0

谢谢Mark提供建议。我会将这些测试应用到问题的底部。硬盘不被突袭。 – 2014-09-06 09:51:35

+0

这是否适合你?如果是这样,请考虑接受它作为您的答案(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 – 2014-09-10 15:14:42

+0

它工作。我发现网络是瓶颈。我使用Iperf工具。谢谢马克。 – 2014-09-11 17:09:23