工作过程中的高CPU

时间:2012-02-14 22:15:20

标签: .net performance cpu performance-testing

我目前正在使用c#编写的.net Web应用程序上运行性能测试。我有一个测试工具,可以在Windows Server 2008上模拟200个用户的负载。

这导致了高达80%的CPU使用率,这对我来说是一个问题。我觉得这可能是我的代码中的问题,因为Web应用程序的工作过程导致高CPU使用率。

如何进一步调试以帮助查找导致此问题的代码可能出现的问题?有什么工具可以帮我解决这个问题吗?我在服务器上运行perf监视器来收集状态,但这只能帮助我。

4 个答案:

答案 0 :(得分:3)

Visual Studio的Ultimate和Premium附带了一个分析器,可以帮助您快速查找消耗最多CPU的方法调用。请参阅:http://msdn.microsoft.com/en-us/library/ms182372.aspx

另一种选择是 ANTS Profiler ,它有21天的试用期,而且非常好。请参阅:http://www.red-gate.com/supportcenter/content/ANTS_Profiler/articles/profiling_web_app

答案 1 :(得分:2)

将客户端代码(模拟200个用户的测试工具)与服务器分开,并将客户端放在另一台计算机上。

通常客户端代码是瓶颈。

答案 2 :(得分:1)

如果@Diego的答案没有达到最佳效果,请将其从200到200,000个用户增加并运行DebugDiag并将其设置为捕获具有高CPU设置的转储并使该框崩溃。我打算将此作为评论,但我想我会给你一些步骤:

使用IIS定义高CPU利用率问题
当IIS进程(INETINFO.EXE,DLLHOST.EXE,W3WP.EXE)停止响应传入请求并且由于CPU利用率过高而无法提供网页时,将识别高CPU。我们将使用以下步骤获取所需的数据。

故障排除步骤

  1. 从服务器上的http://www.microsoft.com/downloads/details.aspx?FamilyID=9bfa49bc-376b-4a54-95aa-73c9156706e7&DisplayLang=en安装DebugDiag。默认安装路径为C:\ Program Files \ IIS Resources \ DebugDiag,可以在安装过程中进行更改。

  2. 在问题发生之前设置性能监视器记录:
    a)打开DebugDiag(开始 - >程序 - > IIS诊断)
    b)转到“工具”菜单 - >选项和设置
    c)选择Performance Log选项卡
    d)单击“启用性能计数器数据记录”
    e)单击“确定” 注意:数据采样间隔和开始监视的时间对于CPU峰值再现的时间是主观的。

  3. 使用以下步骤取消选中调试异常捕获(IIS5和IIS5.1):
    a)打开IIS的MMC b)右键单击计算机名称,然后单击“属性” c)单击Master WWW属性的Edit按钮
    d)转到主目录选项卡
    e)单击底部的配置按钮
    f)转到“Process Options”选项卡,取消选中“Enable Debug Exception Catching” g)单击“确定”

  4. 使用以下步骤创建挂起规则:
    a)打开DebugDiag(开始 - >程序 - > IIS诊断)
    b)选择“IIS Hang”并单击“下一步” c)点击“添加网址”,然后输入一个重现挂起的网址,例如http://ComputerName/HelloWorld.aspx,然后点击“确定”。当系统被要求“测试指定的URL”时,请选择“是” d)单击“确定”并单击“下一步” e)单击“添加转储目标”并选择所需的目标类型
    f)单击确定,然后单击下一步 g)单击“下一步”以获取“规则名称”。 “Userdump Location”可以在这里更改。
    h)选择“立即激活规则”,然后单击“完成” 请注意状态为活动状态。每次创建转储文件时,Userdump Count都会增加。

  5. 如果服务器在安装时处于高CPU状态,则手动获取数据。在DebugDiag中,转到进程选项卡,右键单击该进程并选择“Create Full Userdump”。

  6. 停止PerfMon在转储进程后大约两分钟记录: a)打开DebugDiag(开始 - >程序 - > IIS诊断)
    b)转到“工具”菜单 - >选项和设置
    c)选择Performance Log选项卡
    d)单击“禁用性能计数器数据记录”
    e)单击“确定”

  7. 通过选择“高级分析”选项卡并单击“添加数据文件”来分析转储。添加.dmp后,选择“Crash / Hang Analyzers”脚本并单击“Start Analysis”。完成后,将在C:\ Program Files \ IIS Resources \ DebugDiag \ Reports中创建一个报告(.mht)并显示在Internet Explorer中包含结果和建议。如果使用自定义DLL,可以添加自定义PDB文件的符号路径(工具菜单 - >选项和设置 - >符号搜索路径)。

  8. 使用DebugDiag压缩数据(工具菜单 - >创建增量文件柜文件)并在此处发送/发布此文件。

答案 3 :(得分:1)

到目前为止有趣的答案。有Psscor4工具 - SOS.dll调试扩展的后继工具。它有助于调查CLR中的许多实时数据。我建议在Tess'od Toms博客中进行一些深入的阅读。 ASP.NET调试很多东西。

另外,请查看PerfView工具。我还没有测试,但它声称能够比CLPProfiler更好地处理大型堆。