Устранение неполадок ARR 502.3 / трассировка WinHttp на сервере 2012
У меня есть следующий сценарий:
3 виртуальных сервера Windows Server 2012, все с IIS 8:
- 1 сервер с маршрутизацией запросов приложений 3
- 2 сервера с веб-приложениями, на которые направляет сервер ARR
Я получаю периодически 502 3 12002 ошибки.
Следуя этому руководству http://www.iis.net/learn/extensions/troubleshooting-application-request-routing/troubleshooting-502-errors-in-arr
Я обнаружил, что мне нужно отследить, используя netsh провайдеров WinHttp/WebIO, чтобы получить реальный код ошибки, который сопоставлен с кодом ошибки 12002.
Я запускаю трассировку, как предполагает статья:
netsh trace start scenario=internetclient capture=yes persistent=no level=verbose tracefile=c:\temp\net.etl
Анализируя вывод следов netsh, я не получаю тот уровень информации, который мне предлагает статья. В частности, я получаю только следующие типы записей в трассировке, просматриваемой с помощью netmon:
WINHTTP_MicrosoftWindowsWinHttp:Stopping WorkItem Thread Action...
WINHTTP_MicrosoftWindowsWinHttp:Starting WorkItem Thread Action...
WINHTTP_MicrosoftWindowsWinHttp:Queue Overlapped IO Thread Action...
Я, конечно, не получаю ничего достаточно подробного, что помогло бы мне понять, почему я получаю тайм-ауты.
Есть ли какая-либо причина, по которой Server 2012 не отслеживает API WinHttp до необходимого мне уровня?
Спасибо
1 ответ
Согласно http://support.microsoft.com/kb/193625 и упоминается на странице, на которую вы ссылаетесь, код ошибки win32 12002 указывает на тайм-аут. Встроенное время ARR составляет 30 секунд, и если какой-либо запрос занимает более 30 секунд, то ARR отключится и выдаст 502,3. Если это произойдет, вы сможете просмотреть журналы IIS на своем сервере ARR и увидеть, что запросы, которые 502.3 занимают 30 секунд (или вы можете просто синхронизировать запрос вручную).
Если для 30-секундного тайм-аута по умолчанию у вас мало времени, вы можете изменить его вручную в файле ApplicatoinHost.config под элементом. По умолчанию свойство timeout отсутствует. Пример элемента с таймаутом, заданным как 1 минута, выглядит следующим образом:
<webFarms>
<webFarm name="Example Farm" enabled="true">
<server address="webServer1" enabled="true" />
<server address="webServer2" enabled="true" />
<applicationRequestRouting>
<protocol timeout="00:01:00" />
</applicationRequestRouting>
</webFarm>
<applicationRequestRouting>
<hostAffinityProviderList>
<add name="Microsoft.Web.Arr.HostNameRoundRobin" />
<add name="Microsoft.Web.Arr.HostNameMemory" />
</hostAffinityProviderList>
</applicationRequestRouting>
</webFarms>
Как всегда, вы должны сделать резервную копию этого файла перед его редактированием.