ARR 故障排除 Server 2012 上的 502.3/WinHttp 跟踪

ARR 故障排除 Server 2012 上的 502.3/WinHttp 跟踪

我有以下情况:

3 个 Windows Server 2012 虚拟服务器,全部配备 IIS 8:

  • 1 台带有应用程序请求路由 3 的服务器
  • 2 台服务器,其中包含 ARR 服务器路由到的 Web 应用程序

我收到间歇性 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 不能将 WinHttp API 跟踪到我需要的级别?有什么原因吗?

谢谢

答案1

根据http://support.microsoft.com/kb/193625,并在您链接的页面中提到,win32 错误代码 12002 表示超时。ARR 内置 30 秒超时,如果任何请求花费的时间超过 30 秒,则 ARR 将超时并抛出 502.3。如果发生这种情况,您应该能够查看 ARR 服务器上的 IIS 日志,并查看 502.3 请求花费了 30 秒(或者您可以手动计时请求)。

如果默认的 30 秒超时时间对您来说太短,那么您可以在元素下的 applicatoinHost.config 文件中手动更改它。默认情况下,不存在超时属性。将超时时间指定为 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>

与往常一样,您应该在编辑之前备份此文件。

相关内容