【问题标题】:Is it normal for ASP.NET memory dump to contain strings of the full html page?ASP.NET 内存转储包含完整 html 页面的字符串是否正常?
【发布时间】:2013-02-07 13:19:07
【问题描述】:

我们遇到一种情况,即 ASP.NET 工作进程间歇性地使用 100% 的 CPU。在分析 perfmon 结果和内存转储后,我们看到垃圾收集器正在大量使用 CPU 时间的迹象。

使用 WinDbg,我们看到 LOH 中充满了包含整个 HTML 页面的字符串。字符串的 !gcroot 通常找不到任何根。问题是这在 ASP.NET 应用程序上是正常的还是对于我们构建网站的方式更具体?

请注意,此 ASP.NET 网站是一个基于 Sitecore 的网站。我们知道 Sitecore 会缓存 HTML 输出,但据我了解,Sitecore 不会缓存整个页面,而只是在渲染级别。

【问题讨论】:

  • 您是否将 ASP.NET MVC 与 Sitecore 一起使用?
  • 不,我们没有在这个站点上使用 ASP.NET MVC。这是一个 Sitecore 6.4 站点。

标签: asp.net sitecore windbg dump large-object-heap


【解决方案1】:

完整的html页面在内存中是正常的,特别是when the page buffer is on (and it is by default), the asp.net is build the page in memory,在页面完全渲染后将其发送到浏览器。

现在在某些情况下I have see programmers that use the render function of the page,抓取该 html,然后搜索并替换一些字符串。所以在这种情况下,也可以在内存中找到完整的 html 页面。

现在,如果您看到您的 cpu 为 100%,请检查是否出现崩溃。如果不是,那么您可能在那里进行了一些繁重的计算,或者大量的linq queries,或类似的东西。

【讨论】:

  • 加上 Sitecore 缓存渲染的 html(我认为是磁盘和内存),所以这也可能是您所看到的。
  • @Aristos, 100% cpu 之后不是崩溃,而是挂起。发生这种情况时,我们看到很多线程实际上正在尝试分配小块内存,但正在等待垃圾收集完成。我进一步查看了堆上的实际内容,发现 LOH 上有很多大字符串。完整的 HTML 页面字符串使用了 LOH 大小的 50% 或 LOH 中总字符串实例的大约 70%。这就是为什么我要问这在“健康”的 ASP.NET 应用程序上是否正常。
  • 我认为你误解了我,正如我在问题中所说,挂起并没有导致崩溃。
猜你喜欢
  • 2013-10-29
  • 2022-01-02
  • 2023-03-09
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多