Странное поведение IIS. Очень медленно отправляет данные на локальные запросы

499
Hugo Delsing

У нас есть C# mvcпроект, который отлично работает на нескольких компьютерах. На одном ПК у меня возникла странная проблема, и сначала я подумал, что это связано с кодированием, поэтому возник вопрос о stackoverflow . Но после некоторых тестов, похоже, это не связано с кодированием.

Проект работает на локальном IIS на Windows 10 и имеет несколько контроллеров (страниц). Когда я открываю домашнюю страницу (и несколько других страниц) на том же компьютере, каждый раз для получения первого байта требуется около 2 минут. Другие страницы проекта работают быстро.

Естественно, я думал, что это из-за кода на этих страницах, но отладка показала, что все страницы (быстро и медленно) достигли последнего события ( Application_PreSendRequestContent) в течение 100 мс. После этого он должен начать отправку данных.

Если я захожу на этот сайт с другого компьютера через сеть, он работает как надо. Даже если тот же компьютер все еще ожидает первый байт домашней страницы, другой компьютер может запросить эту же страницу напрямую.

Обзор:

  • ПК 1: Windows 10 / IIS
  • ПК 1: запрос домашней страницы на ПК1: 2 минуты до первого байта
  • ПК 1: запрос страницы X1 на ПК1: 2 минуты до первого байта
  • ПК 1: запрос страницы Х2 на ПК1: мгновенный результат
  • ПК 1: запрос страницы Х3 на ПК1: мгновенный результат

  • ПК 1: запрос домашней страницы и ожидание первого байта

  • ПК 2: запрос домашней страницы на ПК1: мгновенный результат
  • ПК 3: запрос домашней страницы на ПК1: мгновенный результат
  • ПК 1: наконец получить домашнюю страницу через 2 минуты.

Что я исключил:

  • Проблема кодирования: везде будет медленно
  • Проблема с IIS: везде будет медленной
  • Проблема с браузером: происходит в Firefox, Chrome и Edge
  • Проблема с разбором: тип содержимого - текст / обычный
  • Проблема с DNS: проблема с доступом через IP-адрес

Я понятия не имею, что еще я могу искать.

1
Как выглядит настройка сети? Используете ли вы какой-либо вид аутентификации, который может занять время? Какие адреса вы используете для локального доступа к сайту? Из вашего описания может показаться, что довольно редко проблема существует локально, поскольку бывают случаи, когда она не возникает. Есть ли какая-либо особая нагрузка на машину? Какие еще процессы он запускает? Это единственный сайт, размещенный на нем? Seth 6 лет назад 0
Это происходит постоянно на некоторых страницах (всегда одинаково) и никогда не происходит на других страницах (тоже всегда одинаково). Но все обрабатывается до `Application_PreSendRequestContent` (аутентификация, база данных, сеансы и т. Д.) И достигает этой точки через 100 мс. См. [Жизненный цикл приложения ASP.NET] (https://msdn.microsoft.com/en-us/library/bb470252.aspx). Это машина для разработки, не делающая ничего другого. Локальный доступ с помощью `127.0.0.1` или` 192.168.190.40` медленный, доступ к `192.168.190.40` с другого ПК быстрый. Hugo Delsing 6 лет назад 0
Эти страницы меняются между сессиями или они действительно всегда одинаковы? Как насчет потребления памяти на машине? Проверяли ли вы, что пул приложений не перерабатывается, если вы вызываете эти страницы? Если страницы не меняются, будет ли вызов быстрым, если вы сначала запросите их из удаленного местоположения, а не с локального компьютера (то есть вы запрашиваете X1 с ПК2, прежде чем запрашивать его с ПК1)? Seth 6 лет назад 0
Это не проблема переработки. Каждый раз, когда я звоню локально, время ожидания составляет 2 минуты, и каждый раз, когда я звоню удаленно, оно загружается мгновенно. При первой загрузке удаленный сайт запускается медленнее, но после этого работает быстрее. Неважно, если я позвоню на страницу 10 или 100 раз. Если после 50 удаленных звонков я вызываю страницу локально, локально все равно медленно, а удаленно быстро Hugo Delsing 6 лет назад 0
Между страницами нет изменений, и я отключил аутентификацию для всех, чтобы убедиться, что все получают один и тот же запрос. Также локальный и удаленный доступ к `PreSendRequestContent` в одно и то же время имеют значение, но после этого его момент для удаленного и тайм-аут для локального Hugo Delsing 6 лет назад 0
Согласно вашим собственным примерам, это не всегда медленно: «ПК 1: запрос страницы Х2 на ПК1: мгновенный результат». Когда вы запрашиваете локальный ресурс, более вероятно, что это проблема конфигурации Coding / IIS / Firewall. Также посмотрите на [Запуск сайтов на «localhost» очень медленный] (http://stackoverflow.com/questions/2386299/running-sites-on-localhost-is-extremely-slow). Одним из предложений является проверка настроек прокси-сервера, так как вы можете отправлять запрос через прокси-сервер в зависимости от настроек. Даже если вы продолжаете настаивать на том, что событие поднято, это не значит, что оно не может застрять после него. Seth 6 лет назад 0
Страница X2 всегда быстрая (локальная), а домашняя страница, например, всегда медленная. Неважно, если это первый или 10-й раз, я прошу об этом. Поскольку некоторые страницы работают быстро, я исключил проблемы с брандмауэром / DNS / прокси, так как они не работают на уровне страниц. Я исключил кодирование, потому что на той же странице, на том же сервере, удаленный доступ быстрый. Мой код не меняется для локальных / удаленных запросов. Очевидно, что оно застревает после этого события, но все кодирование после этого события вне моей досягаемости, поскольку это стандартный код .NET или IIS. Я посмотрю на вашу ссылку для других предложений, спасибо. Hugo Delsing 6 лет назад 0
Если у вас есть определенные страницы, которые всегда бывают быстрыми, и определенные страницы, которые всегда медленные, если вы пытаетесь получить к ним доступ локально, вам следует проверить, что эти страницы содержат и что происходит в коде. Может быть, вы выполняете олицетворение, какое-то кэширование или проверку IP-доступа, может быть, они просто очень разные по размеру. Вам также следует проверить вкладку «Сеть» в вашем любимом браузере, поскольку это может дать вам дополнительную информацию. Если вы не видите какого-либо ответа, это действительно серверная сторона, но может быть, это просто медленно? Может быть, вы делаете запросы AJAX на FE? Удачи с дальнейшей диагностикой. Seth 6 лет назад 0
Оказывается, это было антивирусное программное обеспечение Sophos. Я отключил его, и он был быстр для всех страниц. Нашел его в виде [ответа] (http://stackoverflow.com/a/27015698/434949) по вашей ссылке. Спасибо @Seth Hugo Delsing 6 лет назад 1
Приятно, что это сработало. Если это поможет рассмотреть вопрос об отзыве, если вы этого еще не сделали. В противном случае игнорируйте этот комментарий. Seth 6 лет назад 0

0 ответов на вопрос

Похожие вопросы