调试.NET Web应用程序High CPU

本文介绍了如何处理.NET Web应用程序中CPU使用率过高问题,包括数据收集、问题调试和常见原因分析,如大量请求、过多循环和GC频繁。通过收集性能计数和User Dump,使用工具如Procdump、DebugDiag和Windbg分析线程和内存行为,从而定位并解决高CPU占用问题。
摘要由CSDN通过智能技术生成

如果Web应用程序经常遇到的问题按频率排名的话,我觉得 

第一名unhandled exception

第二名high memory

第三名high cpu 

这篇文章介绍web应用程序中cpu使用率过高问题相应的数据收集方式和调试问题的方法。 

对ASP.NET Web应用程序CPU使用率过高的问题,从宏观上分分类,大概就这么几种情况,

  1. 大量请求
  2. 过多循环
  3. GC频繁 

数据收集 


收集性能计数 

通过以下命令行创建性能计数信息,该命令的意思是在系统性能计数器里面添加以下性能计数分类中的所有计数器,生成的日志大小最大为500M,达到该上限计数会停止,采样时间间隔为15秒,生成的日志存放在c:\PerfLog\Perf-15Sec.blg文件中。 

Processor
Memory
Process
Asp.NET
ASP.NETApplications
.NET CLRExceptions
.NET CLRMemory
.NET CLRLoading 

logman.execreate counter Perf-15Sec -f bincirc  -max 500 -c "\Processor(*)\*""\Memory\*" "\Process(*)\*" "\ASP.Net(*)\*" "\ASP.Net Applications(*)\*" "\.NET CLRExceptions(*)\*" "\.NET CLR Memory(*)\*" "\.NET CLRLoading(*)\*" -si 00:00:15 -o C:\PerfLog\Perf-15Sec.blg 

重现该问题前通过如下命令开始计数,
logman.exestart Perf-15Sec

重现问题后通过如下计数停止计数。
logman.exe stop Perf-15Sec 


收集Full User Dump 

收集性能计数能够从统计信息的角度对问题进行大概的定位,如果要查看程序内部逻辑,需要收集user dump,通过调试器查看程序详细信息。 

收集dump的工具较多,对于high cpu的问题可以选择以下几种,其中Procdump是专门针对high cpu问题而设计,命令和节奏控制比较简单,推荐使用。 

Procdump 

下载地址

http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx 

在命令行里面运行以下命令,意思是当目标进程 w3wp的CPU使用率高于80%连续超过10秒钟的时候,连续收集三个dump到目标路径c:\dump目录下。参数需要根据需要自行调整。

procdump -c 80 -s 10 -n 3 -o w3wpc:\dump 

Debug Diag

下载地址

http://www.microsoft.com/en-us/download/details.aspx?id=26798 

DebugDiag有图形界面,可以配置类似的参数规则来抓取不同类型的dump。比如抓进程高cpu使用率的情况。

添加一个performnce规则,按照cpu的performance counter来添加相应的参数。(可以添加多种条件)

Adplus

Adplus包含在windbg安装包中, 

下载地址

http://www.microsoft.com/en-us/download/details.aspx?id=8279 

在问题发生的时候,打开命令行执行以下命令, 

adplus -hang -pnw3wp.exe -quiet

 

问题调试

调试high cpu的问题就是要弄清楚cpu时间都花在了什么地方。CPU使用率就是一个统计数据,在采样时间内cpu忙的时间所占的百分比。

 

如何查看cpu时间具体花在了什么地方?

首先我们要弄清楚是哪个或者哪几个进程占用了cpu的处理时间。我们看到机器的cpu使用率偏高,一般都是注意到机器整体的使用率,这个时候性能计数可以帮助我们定位high cpu的进程都有哪些。 

打开日志查看process/processortime对于各个进程不同数值,就可以看出来在特定时间哪个进程在占用cpu资源。 

确定了进程后,要看进程中到底在做什么。我们研究的是asp.net web应用程序,这里假设发现w3wp进程占用了大量的cpu资源。 

接下来我们要搞清楚,我们的cpu资源使用大概落在我们之前分类的那一种或者几种类型中。

 

大量请求 

请求过多的情况一般表现为 

  • 大量工作线程在运行
  • Queue 中存在未处理的请求
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值