最近,我开始在少数服务器上面临问题,其中CPU开始消耗比平常趋势更多的资源。我试图找出这个的根本原因并从任务管理器中获取w3wp进程的转储(右键单击进程并进行转储)。
现在dmp文件大小为14GB,我试图通过WinDBG进行分析,但该工具无法正常工作并收到消息:
我也拿了一些小型飞行器,但是有些小型飞机正常运行而少数不是这样,它与32位或64位之间的混淆无关。(收集的转储是64位)。
我想知道造成这个问题的原因。是文件大小还是我没有正确使用转储。
我检查了link,但没有帮助。
答案 0 :(得分:10)
Windbg不适合这项工作。转储只是快照,所以你不知道之前发生了什么。使用ETW和CPU Sampling,它对所有呼叫进行求和,并详细显示CPU使用情况。
安装Windows性能工具包,它是Windows 10 SDK的一部分(在Win8 / 8.1(Server2012 / R2)和Win10上为V1607 works,如果您使用的是Windows 7 / Server2008R2,则为V1511 SDK)),运行WPRUi.exe
并选择CPU Usage
然后按Start
。捕获1-2分钟的高CPU使用率,然后单击Save
。 Open the generated ETL with WPA.exe (Perf analyzer),将CPU Usage (Sampled)
图表拖放到analysys窗格
和load the Debug Symbols。现在在图表中选择您的流程,放大并展开堆栈,在这里您可以看到所有呼叫的CPU使用权重
在此示例中,Internet Explorer的大部分CPU使用率来自HTML内容。
对于.NET应用程序,WPA会向您显示.net相关的分组,如GC或JIT:
展开w3wp进程的堆栈,看看它在做什么。从名称中你应该知道会发生什么。