ASP.NET Debug系列之二 Hang调试

前几天我翻译了Tess debug系列的第一篇文章以及和大家介绍了一些debugger tools的基本命令。今天我们将一起讨论Tess关于debug 系列的第二篇文章。Tess在每个系列中都使用了问题+结果的结构,为了简化,我将把问题和结果一起给大家。此外,大家在自己机器上重现这些问题的时候,由于机器的差异,许多问题的结果都可能和Tess的不一样,这个不要紧,只要大家能够掌握原理就可以了。同时,由于blog的尺寸问题,图片显示的内容并不十分清晰,大家可以从Tess的链接上去找。

ASP.NET Debug系列之一:环境搭配

Windbg,sos,tinyget,adplus常用命令

1.问题重现

1.浏览页面:http://localhost/BuggyBits/FeaturedProducts.aspx

大概需要5秒左右的时间来呈现这个页面,大家也可以从页面下脚的开始和结束时间来判断。

2.打开5个浏览器,并同时浏览刚才的页面。

这里需要注意的是,如果你几乎同时刷新刚才的页面了,但并没有看到这5个页面上显示相近的开始时间,那么很有可能你没有运行InternetConnections.reg文件。如果没有,双击它使它修改注册表,然后重新测试。

问题1:5个页面各自的运行时间是多少?

结果1:5个浏览器的结果分别是:1-5.0s,2-9.1s,3-12.57s,4-16.07s,5-18.61s。如果你看到每个request的时间间隔在5秒左右,那么你很可能是没有运行InternetConnections.reg文件。

问题2:w3wp.exe的CPU占用率是多少,高还是低?

结果2:非常低的CPU占用率,只有0~5%。

问题3:对于这种低CPU占用率的hang问题有什么潜在原因呢?

结果3:对于这种处理request时间在不断增加并且CPU占用率低的情况来说一般有如下两个原因:1)所有的request在等待一个单thread独占的资源,即这个资源只能被1个thread单独使用。这样的话,其他所有thread就需要等待。2)我们在等待一个资源,由于该资源仍未可用,导致所有需要该资源的thread阻塞。

2.获取dump

1.打开一个命令行窗口,并切换到debugger tools的安装目录。输入以下命令,但请注意,不要立即按enter。

Adplus –hang –pn w3wp.exe –quiet

2.重新打开一个命令行窗口,同样切换到debugger tools目录,使用tinyget脚本来对页面进行并发访问。

tinyget -srv:localhost -uri:/BuggyBits/FeaturedProducts.aspx -threads:30 -loop:50

这个命令将启动30个threads并发送50个requests到FeaturedProducts页面。

3.在request仍然被发送的时候,可以在adplus窗口按enter以获取dump文件。

问题1:在-hang参数下,是什么触发dump文件的产生呢?

结果1:这个问题有点隐蔽,dump文件是在你运行adplus的时刻立即产生的,它不同于-crash参数。-crash参数是需要程序满足crash的条件时才会产生dump文件。

时间: 2024-08-22 14:34:25

ASP.NET Debug系列之二 Hang调试的相关文章

ASP.NET Debug系列之三:Crash调试

前两天翻译了Tess Debug系列的Hang调试,今天就继续和大家看看Tess的第三篇文章,Crash调试.同样,由于机器的差异,可能你的调试结果和Tess有所差异,不过这个不要紧,只要你知道其中的原理就可以了.文章的图片可能会不太清楚,如果需要,大家可以去Tess的原文上看. ASP.NET Debug系列之一:环境搭配 Windbg,sos,tinyget,adplus常用命令 ASP.NET Debug系列之二:Hang调试 1. 问题重现 1) 浏览到http://localhost/

ASP.NET Debug系列之一:环境搭配

一些专业词汇: hang:挂起,如程序反应慢,显示页面时间长等等. crash:崩溃,如w3wp.exe遇到了问题被强行重启等等. memory:内存,这个不用多说了. memory leak:内存泄漏,即内存使用过多,不够用了,如出现 OutOfMemoryException的异常等等. KB:英文是 Knowledge Base,即知识库,从微软的support站点可以查看KB中的文章. dump:相当于在某一静止时刻内存的一个切片. 关于debug系列 这是一个.net的debug系列,其

ASP.NET 5系列教程 (二):Hello World

本篇文章内容比较基础,主要是向大家展示如何创建一个 ASP.NET 5 工程,主要包含内容如下: 创建ASP.NET 5 工程 添加 Todo 控制器 安装 K Version Manager 执行 EF 迁移 打开Visual Studio 2015 Preview.选择 "File" 菜单,选择New > Project. 在New Project 对话框中,点击Templates > Visual C# > Web,选择ASP.NET Web Applicati

ASP.NET 5系列教程(七)完结篇-解读代码

在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]")]   所有符合该模板类型的HTTP 请求都会被路由到该controller.在本例中, 路由的命名规范为对应Controller 的前缀,对于TodoController 类,路由模板为 "api/todo". HTTP 方法 [HttpGet].[HttpPost]和[HttpDele

ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API

ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API. 如何从空的项目模板中启动,及添加控件到应用中. 如何配置 ASP.NET 5.0 管道. 在 IIS 外对立部署应用. 本文的目的是从空的项目开始,逐步讲解如何创建应用.当然,您也可以从"Starter Web" 模板开始,它默认包含了MVC 6.权限.记录等其他模块,同时也内置了有效的控制器和视图在其中. 创

ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云

向视图中添加服务 现在,ASP.NET MVC 6 支持注入类到视图中,和VC类不同的是,对类是公开的.非嵌套或非抽象并没有限制.在这个例子中,我们创建了一个简单的类,用于统计代办事件.已完成事件和平均优先级的服务. 1. 添加命名为Services 的文件夹,在该文件夹下添加名称为 StatisticsService.cs 的类: StatisticsService 类代码设计如下: using System.Linq; using System.Threading.Tasks; using

ASP.net控件开发系列之二

"生死有序" "装装孙子" 上篇文章<开篇>说了不少空洞的理论,这篇文章我还是先说说"大而化之"的东西:1.ASP.net控件(包括页面本身)的生命期的细节:2.如何开始一个控件的编写. "生死有序" ASP.net处理程序在接收到一个用户的页面请求后,它是如何变戏法把一个鲜活的页面呈现给客户端的呢?它都做了哪些事?按什么顺序做的? 要说明这个问题,我们首先要明白,一个页面它本身也是一个Control.从设计模式的

ASP.NET企业开发框架IsLine FrameWork系列之二--命名空间与契约

ILFW框架以最底层为基础,层层堆叠,上层一依赖于下层提供的服务,并实现其派发的接口,形成完 整的FrameWork,不过由于时间原因,有些Provider之间的聚合偏高,例如AppLogProvider在使用数据库 做为记录介质时,已经和DataProvider绑定,并不能使用第三方的数据引擎. ILFW共有18个命名空间,分别管理着这些Provider的主要方法以及各种类库.接口,每个命名空间并 非独立,正如上图表示的一样,所以如果你希望使用ILFW的某一个Provider,可能需要引入几个

LXD 2.0系列之二:LXD安装和配置

本文讲的是LXD 2.0系列之二:LXD安装和配置,[编者的话]第三方调查报告显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关LXD连载博文的第二篇. [LXD 2.0系列开篇:是时候讨论LXD的一切了][LXD 2.0系列之一:LXD简介][LXD 2.0系列之二:LXD安装和配置][LXD 2.0系列之三:你的第一个LXD容器][LXD 2.0系列之四:资源管理][LXD 2.0系列之五:镜像管理][LXD 2.0系列