Назад | Перейти на главную страницу

Медленная загрузка на сервер IIS

У меня Windows Server 2012 R2 работает на экземпляре Amazon EC2 с IIS 8.5. На нем размещается веб-приложение и настраиваемый сервер WebDAV, который взаимодействует с той же базой данных, что и веб-приложение.

Я провел несколько тестов скорости загрузки файлов через веб-приложение и настраиваемый сервер WebDAV. Я заметил, что загрузка файлов через WebDAV с использованием встроенного мини-перенаправителя Microsoft была очень медленной - около 300 кБ / с. Загрузки через веб-сайт с использованием Chrome, как и ожидалось, составляли 10+ МБ / с.

У меня точно такой же код для веб-приложения и сервера WebDAV, работающих на другом сервере под управлением Windows Server 2008 и IIS 7.5, а скорость загрузки составляет 10+ МБ / с как для веб-приложения, так и для сервера WebDAV. Поэтому я почти уверен, что в моем коде нет ничего, что вызывает медленную загрузку. Я потратил несколько дней на изучение этой проблемы и не смог получить скорость загрузки, которая должна быть на сервере WebDAV.

Еще одно интересное замечание: я попытался загрузить в веб-приложение с помощью Internet Explorer, и скорость загрузки была медленной - около 300 кб / с, как при использовании мини-перенаправителя для подключения к серверу WebDAV. Я также тестировал Firefox, и он был похож на Chrome, со скоростью 10+ МБ / с.

Я открыл Fiddler, чтобы изучить запрос / ответы, и пока Fiddler открыт, проблемы не возникает, скорость загрузки составляет 10+ МБ / с, поэтому я не могу получить какую-либо полезную информацию от Fiddler.

Я использовал Wireshark для изучения TCP-пакетов и сравнения различий между моим Windows Server 2008, который работает быстро, и Windows Server 2012, который работает медленно.

Порядок и размер TCP - пакеты одинаковы: два пакета и ACK, два пакета и ACK и т. Д. Размер пакетов составляет около 4k. Единственное отличие - это скорость отправки пакетов, которая на несколько порядков выше в Windows Server 2008.

Я тестировал скорость загрузки на нескольких разных клиентских машинах - Linux, Windows 7 и Windows 8. Я видел, что проблема возникает только в Windows 7, хотя это могло быть совпадением. Это происходит примерно на 75% компьютеров с Windows 7, но не на всех компьютерах с Windows 7.

Все это наводит меня на мысль, что эта проблема должна быть комбинацией конфигурации клиент / сервер, поскольку я не могу привязать проблему к конкретному серверу или только к конкретному клиенту. Фактически, я установил еще один Windows Server 2008, идентичный текущему, где загрузка выполняется быстро, но на новом сервере загрузка по-прежнему выполняется медленно. Так что, может быть, разница в сетевом адаптере или, может быть, в конкретных исправлениях и патчах, драйверах и т. Д.

Вот несколько вещей, которые я пробовал, чтобы увеличить скорость загрузки в Windows Server 2012 R2:

• Увеличенный Winsock SocketSendBuffer длина в реестре на клиентских машинах

• Отключен алгоритм Нэгла на сервере

• Отключена разгрузка TCP Chimney на сервере.

• Включено / отключено около 50 других параметров, связанных с TCP, о которых я читал в различных статьях в Интернете.

• Пытался подключиться к клиенту из нескольких сетевых расположений (если клиент медленно загружается, это происходит медленно, независимо от того, где он подключается).

• Пробовал HTTP вместо HTTPS, но проблема все еще возникает, поэтому, похоже, не связана с SSL или TLS.

• Гарантированный, автоопределение прокси и скрипт автонастройки, где не отмечены в IE.

• Гарантировано, что keep-alive включен в заголовках клиентских запросов

Есть ли у кого-нибудь идеи о том, что могло вызвать мою медленную проблему с загрузкой?

Повторюсь, проблема НЕ возникает при использовании Chrome или Firefox для загрузки через веб-приложение, но возникает при использовании IE. И проблема всегда возникает при использовании мини-перенаправителя на некоторых клиентских машинах, но никогда не возникает на других.

Мне удалось решить проблему, изменив Default Send Window для драйвера Winsock - afd.sys - в реестре Windows клиентского компьютера.

Перейдите к следующему разделу реестра и добавьте новый DWORD с именем DefaultSendWindow и v значение (десятичное) 1920000.

HKLM\System\CurrentControlSet\Services\AFD\Parameters

Примечание:

Значение должно быть как минимум равным заявленной скорости загрузки с использованием следующего уравнения:

(Upload Speed Kbps / 8 ) * 1024 = DefaultSendWindow

Пример:

Объявленная скорость загрузки: 15 Мбит / с = 15 000 Кбит / с

(15000/8) * 1024 = 1920000

Это значение обычно переопределяется в коде для стороннего программного обеспечения, однако продукты Microsoft, похоже, не переопределяют его, вероятно, поскольку они предполагают значение по умолчанию, используемое их собственными afd.sys достаточно. Вот почему я не видел проблемы с использованием Chrome, Firefox, Filezilla и т. Д., Поскольку они сами переопределяли это значение. Казалось бы, разные версии файлов afd.sys используйте разные значения окна отправки по умолчанию, поэтому эта ошибка не обнаруживалась на всех клиентских машинах.