Диагностика запроса истекла по тайм-ауту HttpExceptions

Здесь, в StackOverflow, мы каждый день наблюдаем несколько исключений «Время ожидания запроса истекло».

Факты:

  • Время ожидания запроса по умолчанию составляет 90 секунд.
  • Происходит только на POST
  • Размещаемые данные представляют собой текст, обычно небольшой (‹ 1 КБ), но может достигать нескольких КБ.
  • Данные формы не фиксируются в переменных сервера
  • Клиентские UA разнообразны: IE5.5–7, Firefox 3.0.5, iPhone, Chrome
  • Расположение клиентов разнообразно: Великобритания, Франция, США - Северная Каролина, Огайо, Северная Каролина, Индиана.

Мы протестировали серверный тайм-аут (т. е. с использованием Thread.Sleep) и все переменные формы правильно фиксируются в журнале исключений. Это позволяет нам предположить, что у клиента возникли проблемы с отправкой запроса в отведенное время.

Приветствуются любые мысли о том, как отловить/отладить это условие!


person Jarrod Dixon♦    schedule 14.01.2009    source источник
comment
Именно эта проблема возникла у нас, когда мы перешли с IIS6 на интегрированный режим IIS7.5. Результаты нашего запроса доступны здесь: время ожидания запроса истекло httpexceptions">stackoverflow.com/questions/4929115/.   -  person Dr. C. Hilarius    schedule 02.09.2011


Ответы (7)


У меня такая же проблема на наших производственных серверах, которые используют небольшой веб-сервис AJAX. Выполнив перехват пакетов за пределами нашего брандмауэра, мы обнаружили, что POST-запрос к сервису поступает в виде двух сегментов TCP, а второй сегмент так и не дошел до нас. (первый пакет содержит только заголовки, второй отсутствующий пакет должен быть телом json). Таким образом, IIS просто сидит и ждет остальной части POST. После настроенного тайм-аута сервер отправляет пакет RST клиенту и регистрирует ошибку «Время ожидания запроса истекло», что является правильным поведением.

Мы безуспешно пытаемся получить репродукцию клиента, но в нашем случае это, похоже, полностью связано с сетью (или, возможно, с каким-то «безопасным» программным обеспечением, которому не нравится содержимое поста).

person Barry Hagan    schedule 02.04.2009
comment
Это действительно все, что мы смогли определить — полные запросы не поступают на сервер. Это беспокоит, так как вы хотите обслуживать каждый запрос, особенно POST для голосования и вопросов/ответов! - person Jarrod Dixon♦; 23.08.2009
comment
Также похоже, что многие незавершенные запросы поступают из источников спама. - person Jarrod Dixon♦; 16.10.2009
comment
Вы когда-нибудь придумывали решение этой проблемы или просто игнорируете их? Я часто получаю это от законных запросов (не спама). - person brheal; 23.01.2011
comment
Как это приемлемый ответ? Он говорит, в чем проблема... но это только половина проблемы. Каково возможное решение? - person corymathews; 07.05.2012
comment
Вот и я столкнулся с той же проблемой. Есть ли решение этой проблемы? - person Daniel T.; 05.06.2012

Если вы используете IIS 7, вы можете использовать Не удалось отследить запрос. На самом деле я не использовал его для тайм-аутов, я в основном настроил его для захвата только определенных кодов ошибок http. Но я знаю, что вы можете заставить его сбрасывать следы любого запроса, занимающего больше X времени.

person Phil Scott    schedule 14.01.2009
comment
Да, мы собирались включить это сегодня вечером - спасибо за напоминание :) - person Jarrod Dixon♦; 14.01.2009
comment
Мы также собираемся добавить некоторые операторы трассировки в пути кода затронутых URL-адресов — надеюсь, это поможет найти проблему. - person Jarrod Dixon♦; 14.01.2009
comment
См. раздел stackoverflow.com/questions/442258/ - person Jarrod Dixon♦; 14.01.2009

Вы пытались опубликовать вручную через telnet и просто не завершили POST. Мне было бы интересно посмотреть, сможете ли вы воспроизвести поведение, которое видите. Учитывая характер сайта, я не удивлюсь, если вы преднамеренно получите несколько искаженных POST-сообщений, чтобы попытаться взломать систему.

Иногда я замечал, что мне нужно перезапустить Safari, чтобы SO снова заработал после зависания некоторых действий, но я предположил, что это была моя проблема.

person Community    schedule 14.01.2009
comment
Мне не удалось воспроизвести поведение — длительные запросы просто 504. Но это хорошо, потому что мы знаем, что это (вероятно) не клиентские проблемы, поскольку конвейер ASP.NET даже не достигнут. - person Jarrod Dixon♦; 14.01.2009

В этой статье описывается, как поймать это с помощью windbg:

http://blogs.msdn.com/b/asiatech/archive/2012/06/21/how-to-troubleshoot-httpexception-request-timed-out-asp-net-4-0-64-bit.aspx

person jlo    schedule 02.02.2013
comment
DebugDiag, а не Windbg. - person mhenry1384; 16.11.2016

Раньше мы часто видели их с нашим веб-клиентом с очень высоким трафиком - интересно, связано ли это. Предположительно, HttpWebRequest (я предполагаю, что у вас проблемы с HttpWebResponse? Может быть, у них одинаковые проблемы) использует под прикрытием какой-то дрянной пул потоков, даже когда ваши запросы синхронны. Время от времени что-то блокировалось, потому что какой-то другой объект .NET выше в стеке использовал тот же системный пул потоков, и один останавливал другой, что в конечном итоге вызывало тайм-аут. Я думаю, что проблема лучше описана здесь: http://www.deez.info/sengelha/2005/03/03/beware-threadpools-and-httpwebrequest/

person Community    schedule 14.01.2009
comment
Там очень интенсивная статья - подразумевается, что проблема была исправлена ​​в версии 2.0. Изучу больше об этом, чтобы увидеть, так ли это. - person Jarrod Dixon♦; 14.01.2009

Я бы также просканировал IP-адреса в ваших журналах, чтобы убедиться, что у одних и тех же людей возникают проблемы неоднократно. Знаете, вполне возможно, что некоторые люди все еще используют коммутируемые учетные записи, или на их стороне могут быть другие проблемы с сетью. Но, конечно же, не списывайте это со счетов, не изучив как можно больше.

person tsimon    schedule 14.01.2009

Мы сталкиваемся с той же проблемой «Время ожидания запроса истекло» с нашими веб-серверами после перехода с IIS6 на IIS7. Я считаю, что проблема связана с IIS7. Я предполагаю, что эти ошибки были проглочены или проигнорированы дальше по цепочке обработки в IIS6, прежде чем запрос был передан в ASP.Net для обработки. Сегодня я включаю отслеживание неудачных запросов, чтобы посмотреть, смогу ли я получить дополнительную информацию о проблеме. Пока кажется, что ваше объяснение причин на стороне клиента кажется наиболее достоверным.

person Community    schedule 17.02.2009