我正在使用Nginx在专用服务器上提供静态文件。 服务器没有网站,它只是一个文件下载服务器。文件大小范围从MB到GB。
之前我在unmetered.com上有8个500 Mbps的专用服务器。他们每个人都表现得很好。
我想从FDCServers购买10Gbps服务器。因为一个服务器比多个服务器容易管理。
以下是服务器的规格:
Dual Xeon E5-2640(15M高速缓存,2.50 GHz,7.20 GT / s英特尔®QPI) - 24核 128 GB RAM 10 Gbit / s网络未计量 Ubuntu 14.04 LTS 1.5 TB SATA
但我的新巨型服务器的速度不超过500到600 Mbps。我安装了nload来监控流量和上传/下载速度。报告与之前的unmetered.com服务器几乎相同。
然后我认为这可能是由于SATA硬盘的读取速率限制造成的。
因此,我在新的强大服务器中购买并安装了3个X 240 GB SSD驱动器。
我将文件移入SSD Drive并下载以进行测试。速度仍然不好。我的速度只有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 :(得分:4)
执行测试记忆:
用于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] [ <=> ]
从localhost下载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;
祝你好运
答案 1 :(得分:2)
我认为你需要分开问题并独立测试以确定真正的问题 - 如果它是网络,猜测它是磁盘并在新磁盘上花费数百或数千是没有用的。你有太多的变量可以随意改变 - 你需要分而治之。
1)要测试磁盘,请使用磁盘性能工具或旧的dd
来测量吞吐量(以字节/秒为单位)和延迟(以毫秒为单位)。从磁盘读取数据块并写入/dev/null
以测试读取速度。从/dev/zero
读取数据块并写入磁盘以测试写入速度 - 如有必要。
您的磁盘是否按顺序进行了RAID操作?并分析了多少个控制器?
2)要测试网络,请使用nc
(a.k.a。netcat
)并捶打网络以查看您测量的吞吐量和延迟。从/dev/zero
读取数据块,并使用nc
通过网络发送。从网络中读取数据块并丢弃到/dev/null
以便在另一个方向上进行测试。
3)要测试你的nginx服务器,在RAMdisk上放一些静态文件然后你将独立于物理磁盘。
只有这样你才能知道需要调整的内容......