【问题标题】:ASP.NET CPU Spike related to high "% Time in GC" - what is a good baseline for ASP.NET?与高“% Time in GC”相关的 ASP.NET CPU Spike - 什么是 ASP.NET 的良好基准?
【发布时间】:2011-12-12 20:56:38
【问题描述】:

我有一种情况,ASP.NET 应用程序导致 w3wp 服务 cpu 使用率飙升至 100%,同时“%time in GC”性能计数器显示非常高的数字 20-70%。这不时发生。

这一切都是在我从 2.0 升级到 .NET 4.0 之后开始发生的,顺便说一句。

我正在查看性能计数器,试图获得更多线索,但我缺乏良好的基线......什么是“正常”?

  • #Gen 0 收藏 10,000
  • #Gen 1 Collections 4,700(似乎很高)
  • #Gen 2 收藏 1,200(再次看起来很高)
  • Finalization Survivors 5000(这么高吗??)

让您了解应用程序的繁忙程度:

  • ASP.NET 请求/秒:170
  • ASP.NET 会话活动:900

在每个页面请求上,在我的开发环境中,Finalization Survivors 大约为 50。看起来很高,但是我查看的所有分析工具都没有显示任何异常...

我正在寻找一些关于基本 asp.net 应用程序的这些参数的典型值是什么的基线。例如,有多少“Finalization Survivors”仅仅是因为 ASP.NET?

非常感谢!

更新 - 回滚到 .net 2.0 “修复”了问题

自从我升级到 .NET 4.0 以来,我从早上开始就一直在努力解决这个问题 我回滚了我的更改 - 将网站设置为使用 asp.net 2.0,回滚了一些使用 .net 4.0 编译的二进制文件,现在一切都很漂亮 - 没有尖峰,没有很长的 GC 时间,但仍然有很多完成幸存者..

**UPDATE 2 - 只是在 IIS 中切换到 .NET 4.0 会导致速度变慢

我正在更新此内容,以防有一天它对遇到同样问题的其他人有所帮助。 我发现问题是在网站上切换 IIS 以使用 ASP.NET 4.0 后开始出现的,而无需更改任何 .net 2.0 网站代码。我假设(也许是错误的)它是向后兼容的,因此 .net 2.0 网站和它引用的资源在 asp.net 4.0 下应该可以正常工作,但似乎存在一些问题。如果我有时间进一步调查,我会用我的发现更新此内容

【问题讨论】:

  • +1 对此还有什么更新吗?我对终结幸存者有类似的问题(在 164 - 575 之间波动)。我只是使用 Win 7 的性能监视器。我有很多对象集合。我应该对哪些其他参数感兴趣? .NET 3.5 和 win 应用程序。

标签: asp.net


【解决方案1】:

我建议查看 ANTS Performance ProfilerANTS Memory Profiler 以了解可能导致峰值的原因。

【讨论】:

  • 是的,我 ANTS 内存分析器是我使用的工具之一,但我只在我的开发和登台环境中使用它。害怕在生产中使用它们 - 生产使用安全吗?
  • 这并不理想,但您必须以某种方式深入了解它,对吧?不会比现在发生的更糟吧?随着 CPU 的飙升,任何使用该应用程序的人都会遇到严重的延迟。
【解决方案2】:

我已经看到,当达到服务器容量或大量应用程序池回收发生时。这是一篇很棒的文章,您可以按照以下文章来识别瓶颈:

Chapter 17 — Tuning .NET Application Performance

【讨论】:

    【解决方案3】:

    检查您的磁盘空间以及您的虚拟内存和 pagefile.sys 配置为如何扩展。如果您放置 pagefile.sys 的磁盘上的磁盘空间非常低,则 GC 中的时间百分比可能会飙升。这可能是因为最近最少使用的 Gen2 和 LOH 无法分页,因为没有空间可以扩展,它们占用了 Ram,留下 Gen1 和 2 来填充空间。这会频繁地启动 GC,从而导致 CPU 峰值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2013-03-23
      • 2011-11-12
      • 2023-03-11
      相关资源
      最近更新 更多