该文章最早以英文发表在Team的博客。
Windows AZure Web Sites FREB trace for slow requests

IIS失败请求跟踪

从IIS 7开始,IIS提供了一个非常实用的功能:失败请求跟踪。在页面运行时,IIS失败请求跟踪通过ETW记录整个页面处理过程的详细信息。通过分析请求跟踪结果可以定位或者缩小问题的范围。

IIS提供了两种失败请求跟踪规则:

  • 状态码(StatusCode)

指定要跟踪的HTTP状态代码,可以在该列表中输入多个以逗号分隔的状态代码。 还可以使用子状态代码来细分状态代码,如“404.2, 500”。比如某个页面间歇性返回404,您可以创建一个规则,跟踪状态码为404的请求。只有当服务器响应的HTTP状态代码为404是,IIS才会将跟踪结果保存下来。

  • 请求执行时间(timeTaken)

主要用于IIS请求耗费时间过长。比如,某个页面正常情况下响应时间为5秒。某些情况下,可能响应时间超过20秒。要排查该问题,您可以创建一个规则要求IIS跟踪执行时间超过15秒的请求。

 Azure网站中的失败请求跟踪

Microsoft Azure网站架构一文中,我们提到Azure网站也是通过IIS来运行客户的网站。为了方便客户排查问题,Azure网站也开放了失败请求跟踪功能。但是,Azure网站中只开放了状态码规则,只能跟踪服务器响应状态码为40~600的请求。下面是Azure网站中在管理门户网站打开失败请求功能后的配置。

<tracing>
      <traceFailedRequests>
        <add path=”*”>
          <traceAreas>
            <add provider=”ASP” verbosity=”Verbose” />
            <add provider=”ASPNET” areas=”Infrastructure,Module,Page,AppServices” verbosity=”Verbose” />
            <add provider=”ISAPI Extension” verbosity=”Verbose” />
            <add provider=”WWW Server” areas=”Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,Rewrite” verbosity=”Verbose” />
          </traceAreas>
          <failureDefinitions statusCodes=”400-600″ />
        </add>
      </traceFailedRequests>
</tracing>

Azure网站中利用失败请求跟踪耗时请求

通过手工修改web.config文件,我们可以Azure网站中利用失败请求跟踪来排查执行时间比较长的请求。具体步骤如下:

1. 在门户管理网站中打开失败请求跟踪功能

2.在您的网站的web.config中,插入如下配置

<system.webServer>
<tracing>
<traceFailedRequests>
<remove path=”*” />
<add path=”*”>
<traceAreas>
<add provider=”ASP” verbosity=”Verbose” />
<add provider=”ASPNET” areas=”Infrastructure,Module,Page,AppServices” verbosity=”Verbose” />
<add provider=”ISAPI Extension” verbosity=”Verbose” />
<add provider=”WWW Server” areas=”Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,Rewrite” verbosity=”Verbose” />
</traceAreas>
<failureDefinitions timeTaken=”00:00:10″ statusCodes=”400-999″ />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>

上面的配置将会跟踪满足下面条件的请求:

  • 请求执行时间超过10秒
  • 状态码大于400

耗时请求跟踪结果实例分析

下面是一个运行缓慢的页面请求跟踪结果,可以看到失败的原因是TIME_TAKEN;具体的执行时间为10秒。

failed request tracing

在Compact View里面,可以看到页面开始时间:1:57:55.045

failed request tracing2

1:57:55.827时开始执行Page_Load,直至跟踪结束。

failed request tracing3

由此,我们可以得出结论:Page_Load方法花费了超过10秒的时间。


Leave a comment

电子邮件地址不会被公开。 必填项已用*标注

One thought on “Azure Websites: 利用失败请求跟踪调试页面运行缓慢问题