2014-09-06 111 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