Проблемы с производительностью на сервере статических файлов Nginx, обслуживающем 10 Гбит / с

Я использую Nginx для обслуживания статических файлов на выделенных серверах. На сервере нет веб-сайта, это всего лишь сервер загрузки файлов. Размеры файлов варьируются от МБ до ГБ.

Ранее у меня было 8 выделенных серверов со скоростью 500 Мбит / с на unmetered.com. Каждый из них выступал великолепно.

Я думал купить сервер 10Gbps от FDCServers. Потому что одним проще управлять, чем несколькими серверами.

Ниже приведены спецификации сервера:

Dual Xeon E5-2640 (кэш-память 15 МБ, 2,50 ГГц, 7,20 ГТ / с Intel® QPI) - 24 ядра, 128 ГБ ОЗУ, 10 Гбит / с, сеть Unmetered Ubuntu 14,04 LTS, 1,5 ТБ, SATA

Но мой новый гигантский сервер не дает скорости более 500-600 Мбит / с. Я установил nload для мониторинга трафика и скорости загрузки / выгрузки. Он сообщает почти так же, как предыдущие серверы unmetered.com.

Тогда я подумал, что это может быть связано с ограничением скорости чтения жесткого диска SATA.

Поэтому я приобрел и установил 3 X 240 ГБ SSD-накопители на новый мощный сервер.

Я переместил файл в SSD Drive и загрузил его для тестирования. Скорость все еще не хорошая. Я получаю только от 250 до 300 кбит / с. Принимая во внимание, что это должно дать мне по крайней мере 2 Мбит / с (Это ограничение скорости на IP, которое я поместил в конфигурационные файлы Nginx).

Затем я искал в настройках Gigabit Ethernet Tuning. Найдена пара настроек sysctl, которые необходимо настроить для сети 10 Гбит / с.

http://www.nas.nasa.gov/hecc/support/kb/Optional-Advanced-Tuning-for-Linux_138.html

Я реализовал их, но все равно пропускная способность такая же, как и у моих предыдущих серверов 500 Мбит / с.

Можете ли вы помочь в улучшении пропускной способности сети этого сервера. Я обратился в службу поддержки FDCServer, и они подтвердили, что их серверы могут легко дать от 3 до 5 Гбит / с, и они не могут помочь мне настроить его.

После всех настроек и настроек я получаю только 700Mbit максимум.

Дайте мне знать, если вам нужно больше деталей.

3 ответа

Решение

Выполните тест памяти:

для DDR3 1333 МГц 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%

Проверьте скорость процессора с помощью трубы:

$ 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 ГБ / с.

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) Чтобы проверить диски, используйте инструмент производительности диска или старый добрый dd для измерения пропускной способности в байтах / сек и задержки в миллисекундах. Чтение блоков данных с диска и запись в /dev/null проверить скорость чтения. Чтение блоков данных из /dev/zero и записать на диск для проверки скорости записи - при необходимости.

Кстати, ваши диски RAID? И разделить на сколько контроллеров?

2) Для проверки сети используйте nc (ака netcat) и перебейте сеть, чтобы увидеть, какую пропускную способность и задержку вы измеряете. Чтение блоков данных из /dev/zero и отправить через сеть с nc, Чтение блоков данных из сети и сброс их в /dev/null для тестирования в другом направлении.

3) Чтобы протестировать ваш сервер nginx, поместите несколько статических файлов на RAM-диск, и тогда вы будете независимы от физических дисков.

Только тогда вы узнаете, что нужно настроить...

У меня такая же проблема. При 1 Гбит файл загружается со скоростью до 20 Мбит/сек. После измененияsendfile_max_chunkпараметр, скорость стала максимальной.

Изменять:

      sendfile_max_chunk 256k;

К:

      sendfile_max_chunk 16M;
Другие вопросы по тегам