在 IIS6 上运行的 ASP.NET Web 应用程序会定期使 CPU 达到 100%。在这些事件中,几乎所有的 CPU 使用情况都是由 W3WP 负责的。CPU 在几分钟到一个多小时的任何时间都保持在 100%。

这是在临时服务器上,此时该网站仅从测试人员那里获得很少的流量。

我们已经在服务器上运行了 ANTS profiler,但效果并不理想。

我们可以从哪里开始找出导致这些事件的原因以及哪些代码在这段时间内使 CPU 保持忙碌?

有帮助吗?

解决方案

  1. 标准 Windows 性能计数器(查找其他相关活动,例如许多 GET 请求、过多的网络或磁盘 I/O 等);您可以从代码以及 perfmon 中读取它们(例如,如果 CPU 使用率超过阈值,则触发数据收集)
  2. 自定义性能计数器(特别是离机请求和执行时间不确定的其他调用的时间)
  3. 使用 Visual Studio Team Test 或 WCAT 等工具进行负载测试
  4. 如果您可以在 IIS 7 上进行测试或升级到 IIS 7,则可以配置失败请求跟踪,以便在请求花费超过一定时间时生成跟踪
  5. 使用 logparser 查看哪些请求在 CPU 峰值时到达
  6. 代码审查/演练(特别是查找可能无法正确终止的循环,例如发生错误,以及锁定和潜在的线程问题,例如静态的使用)
  7. CPU 和内存分析(在生产系统上可能很困难)
  8. 流程浏览器
  9. Windows资源监视器
  10. 详细的错误记录
  11. 自定义跟踪日志记录,包括执行时间详细信息(可能是有条件的,基于 CPU 使用性能计数器)
  12. AppPool回收时是否出现错误?如果是这样,这可能是一个线索。

其他提示

这不是太多的答案,但你可能需要去老同学和捕捉到的IIS进程并调试它的图像快照。你可能也想看看苔丝Ferrandez 的博客 - 她是一个踢**微软升级工程师,她的博客专注于调试窗口ASP.NET,但博客是相关的窗口调试一般。如果选择ASP.NET标签(这是我一直挂),那么你会看到几个项目是相似的。

如果你的CPU是扣球100%,呆在那里,它很可能是你要么有一个死锁情况或无限循环。一个分析器似乎是找到一个无限循环的良好选择。死锁更加难以追踪,但是。

进程浏览器是用于故障诊断的优秀工具。你可以尝试寻找高 CPU使用率。它可以让你见识到你的应用程序的工作方式。

您也可以尝试 Procdump 转储处理和分析到底发生了什么的CPU。

我们有这对被倾销数据吨到输出递归查询 - ?你有双重检查一切不退出,没有无限循环存在

可能会以单页缩小它 - 我们发现蚂蚁不能在同一情况下太大的帮助或者 - 我们落得这样做运行站点点击页面观看CPU - 点击下一页手表CPU - 非常有条理和费时,但如果你不能使用一些代码找到它跟踪你可能是出于运气 -

我们能够使用IIS日志文件来跟踪到一个组页面是犯罪嫌疑人 -

希望帮助!

这是一个猜测,在最好的,但也许你的开发团队正在构建和部署在调试模式下的应用,在释放模式代替。这将导致的.pdb文件的发生。这样做的含义是,你的应用将占用额外的资源,以收集系统状态和调试信息系统的执行过程中,导致更多处理器利用率。

所以,这将是足够简单,以确保它们正在建立和释放模式部署。

我知道这是一篇很老的帖子,但这也是一个常见问题。所有建议的方法都非常好,但它们总是指向一个进程,而且我们很可能已经知道我们的网站出现了问题,但我们只想知道哪个特定页面在处理上花费了太多时间。我认为最精确和简单的工具是 IIS 本身。

  1. 只需在 IIS 左侧窗格中单击您的服务器即可。
  2. 单击主窗格中的“工作进程”。您已经看到哪个应用程序池占用了过多的 CPU。
  3. 双击此行(最终通过单击“显示全部”来刷新),以查看哪些页面在此池中消耗了太多的CPU时间(“时间过去”列)

如果您发现一个网页,需要时间来加载,使用SharePoint的的开发中心以查看哪些组件需要时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top