17 декабря 2012 г., 11:42 пользователь Oleg Palij <o.palij@xxxxxxxxxxxx> написал:
17 дек. 2012, в 08:40, Вадим Лазовский написал(а):
nginx/1.2.3 стримит видео, упираемся в 1.5 Гб/c (две 1Гб сетевухи в bond) и nginx начинает с задержкой в начале (несколько секунд, иногда до минуты) отдавать файлы, при этом iowait 20-30%, si ~ 20%.
moov-атом точно перенесен в начала файла? Во всех файлах?
Точно.
Вот это место я бы перепроверил. Уж очень подобное поведение похоже на то, что описано в документации:
"Если файл отформатирован хорошо, с метаданными в начале файла, nginx просто посылает в ответ содержимое файла. В противном случае, он вынужден будет прочитать файл и подготовить новый поток, в котором метаданные предшествуют медийным данным. Это требует дополнительного процессорного времени, памяти и дискового ввода/вывода, поэтому лучше подготовить исходный файл для псевдо-стриминга, нежели чем заставлять nginx делать это для каждого запроса."
Выключите mp4, просто раздавайте файлы без обработки. Будет ли тот же эффект?
Популярные файлы лежат на ssd, остальное на hdd.
Сколько всего ssd и обычных дисках. И не в массивах ли они часом?
1 ssd и 6 hdd в software raid5.
В свое время намучились с raid5. Линейное чтение - великолепно, но как только появляется сотня-другая клиентов - начинается затуп.
С тех пор только отдельные диски или raid10. Чего и вам желаю.
Без aio отдаем 4 Гбит.
С включенным sendfile? directio для очень больших файлов включен? output_buffers тюнили?
sendfile включен. Все остальное, кроме "timer_resolution 100ms;" по-умолчанию.
sysctl.conf:
net.ipv4.tcp_tw_recycle = 1
net.core.wmem_default = 262144
net.core.wmem_max = 4194304
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.ipv4.tcp_rmem = 8192 262144 4194304
net.ipv4.tcp_wmem = 8192 262144 4194304
Мб воткнуть третий линк и добавить памяти?.
А зачем третий линк, если два не утилизируются полностью? Память, к сожалению, не добавить.
Это на случай, если упирается в прерывания, хотя, кажется, дело не в этом.