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

Posted

技术标签:

【中文标题】Nginx 静态文件服务 10Gbps 服务器的性能问题【英文标题】:Performance Issue on Nginx Static File Serving 10Gbps Server 【发布时间】:2014-10-31 03:52:23 【问题描述】:

我正在使用 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硬盘的读取速率限制。

所以我购买并在 New Powerful 服务器上安装了 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。

如果您需要更多详细信息,请告诉我。

【问题讨论】:

硬盘未进行 RAID。 linux内核版本? 【参考方案1】:

执行测试记忆:

适用于 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;

祝你好运

【讨论】:

非常感谢。测试帮助很大。但是我发现 aio 更适合静态文件共享。【参考方案2】:

我认为您需要拆分问题并独立测试以确定真正的问题 - 如果是网络,猜测是磁盘并在新磁盘上花费数百或数千是没有用的。您的变量太多,无法随意更改 - 您需要分而治之。

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

顺便说一句,您的磁盘是否进行了 RAID?并分成多少个控制器?

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

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

只有这样你才能知道需要调整什么...

【讨论】:

感谢马克的建议。我将应用这些测试来找出问题的根源。硬盘不会被突袭。 这对你有用吗?如果是这样,请考虑接受它作为您的答案 (meta.stackexchange.com/questions/5234/…)。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 成功了。我发现网络是瓶颈。我使用了 Iperf 工具。谢谢马克。

以上是关于Nginx 静态文件服务 10Gbps 服务器的性能问题的主要内容,如果未能解决你的问题,请参考以下文章

docker、nginx、django 以及如何提供静态文件

使用Nginx快速搭建静态资源服务器,并配置ssl证书

使用Nginx快速搭建静态资源服务器,并配置ssl证书

如何使用 NGINX 直接提供所有现有的静态文件,但将其余的代理到后端服务器。

nginx代理cdn静态文件不一致

nginx静态服务器静态资源发布脚本