nginx + webdav put работает медленно
Alexander Reznik
a.reznik на astrotech-co.ru
Чт Сен 1 07:22:28 UTC 2011
Доброго времени суток!
Есть nginx (1.0.6, но проверял и на 1.0.0 и на 0.8.49) с webdav. 8
worker'ов (по количеству ядер на серваке), 1000 коннектов на воркера, 1
server с 1 location, с webdav и ограничением доступа по ip. Сервер
слушает скажем 80 и 81 порты. На 80 приходит порядка 100 GET/секунду, на
81 до 150.000 PUT/час. При попытке положить файл размером 1-100кб put'ом
на 81 порт при помощи curl возникают задержки до 15 секунд. При этом
около секунды - ожидание ответа continue от сервера и остальное время до
ответа 201 created. Если положить файл на 80 порт в это же время, то вся
операция проходит за 0.1-0.05 сек. aio и сендфайл включать пробовал, не
помогает, количество воркеров изменять пробовал, тоже не помогает. В
диски не упираемся, операции с файлами во время тормозов nginx работают
быстро, в swap не уходим. Создается впечатление, что все PUT запросы
обрабатываются одним worker'ом. Статистика nginx говорит примерно
следующее: Active connections 50 - 150, из этого reading/writing
соотносятся 1/2. (например при 60 коннектах 20 читают, 40 пишут).
конфиг:
server {
listen 80;
listen 2000;
server_name media;
client_max_body_size 100m;
expires 5d;
set $root
location / {
root $root;
dav_methods PUT DELETE MKCOL COPY MOVE;
create_full_put_path on;
dav_access group:rw all:r;
limit_except GET {
allow 192.168.0.0/24;
deny all;
}
}
}
Подробная информация о списке рассылки nginx-ru