【问题标题】:high cpu in work process工作进程中的高cpu
【发布时间】:2012-03-06 07:12:59
【问题描述】:

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

这导致 CPU 使用率非常高,约为 80%,这让我很担心。我觉得这可能是我的代码中的一个问题,因为它是导致 CPU 使用率高的 Web 应用程序的工作过程。

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

【问题讨论】:

  • 你是怎么做到的? Diego 的回答是否让您更接近于识别高 CPU?

标签: .net performance cpu performance-testing


【解决方案1】:

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

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

【讨论】:

  • 砰! psscore 现在公开了?!砰。这对社区来说太棒了!
  • 是的。您应该考虑关注 msdn 上的开发人员博客,而不是您已经知道的 ;)
【解决方案2】:

如果@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) 选择性能日志选项卡
    d) 点击“启用性能计数器数据记录”
    e) 单击确定
    注意:数据采样间隔和开始监控的时间取决于 CPU 峰值重现的时间。

  3. 通过以下步骤取消选中调试异常捕获(IIS5 和 IIS5.1):
    a) 打开 IIS 的 MMC
    b) 右键单击​​计算机名称,然后单击属性
    c) 单击 Master WWW 属性的编辑按钮
    d) 转到主目录选项卡
    e) 点击底部的配置按钮
    f) 转到“进程选项”选项卡并取消选中“启用调试异常捕获”
    g) 点击确定

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

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

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

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

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

【讨论】:

  • 哇,你是怎么做到的呢?您是否能够找到一种从“互联网”(forums.iis.net/t/997780.aspx)实际复制文本的方法? :O 太棒了! ;)
  • @user492238 它是一个模板 - 我们在做 Microsoft 开发人员支持时都使用它。
  • 所以你应该在发帖时说清楚。并且没有给出理由的投票不会给你带来任何尊重......;)
【解决方案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

【讨论】:

    【解决方案4】:

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

    通常客户端代码是瓶颈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多