!aspxpages(即!dumphttpcontext)命令输出的解释

在排查ASP.NET网站High CPU问题时, 经常使用hang dump来确定常规手段难以发现的原因.

经常会使用!aspxpages命令来查看当前进程中都有那些资源正被请求, 被请求的资源都运行了多久. 这个命令的输出样本如下.

0:000> !aspxpages
Going to dump the HttpContexts found in the heap.
Loading the heap objects into our cache.
HttpContext                       Timeout  Completed          Running  ThreadId    ReturnCode   Verb     RequestPath+QueryString

0x0000000101d43c10      110 Sec       yes                                   XXX          200                POST       /_vti_bin/Lists.asmx
0x0000000101d5ae68      110 Sec       yes                                   XXX          200                POST       /_vti_bin/Lists.asmx
0x0000000101d6e7a0      110 Sec       yes                                   XXX          200                POST       /_vti_bin/search.asmx

0x0000000107c5baa0      110 Sec        no                  18 Sec        78           200                GET         /Pages/Home.aspx

0x000000010ab794f0       110 Sec        no                  10 Sec        90           200                GET         /pages/home.aspx

......

Total 1,042 HttpContext objects

假如只看已经列出来的信息的话, 结论如下:

  1. 三个对于web service的访问已经成功结束. 之所以列在这里, 乃是因为抓dump的时候, 还没有进行垃圾收集, 这些对象还依然存在于内存中. 因为运行已经结束, 所以线程ID显示为XXX,
  2. 两个对aspx页面的访问还正在运行, 可以看到他们的线程ID分别是78和90。 并且分别已经运行了18秒和10秒.

注意, !aspxpages与!dumphttpcontext命令是一致的.

原文地址:https://www.cnblogs.com/awpatp/p/1847963.html