2013-02-22 43 views
2

我们有一种情况,ASP.NET工作进程间歇性地使用100%的CPU。在分析perfmon结果和内存转储后,我们看到垃圾收集器大量使用CPU的指示。ASP.NET内存转储包含完整html页面的字符串是否正常?

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

注意到这个ASP.NET网站是一个基于Sitecore的网站可能很重要。我们了解Sitecore会缓存HTML输出,但据我的理解,Sitecore不会缓存整个页面,而只会在渲染层面上缓存。

+0

您是否在Sitecore中使用ASP.NET MVC? – JerKimball 2013-03-14 04:38:56

+0

不,我们没有在这个网站上使用ASP.NET MVC。它是一个Sitecore 6.4站点。 – chenz 2013-03-14 07:17:59

回答

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,或类似的东西。

+0

加Sitecore缓存呈现的HTML(我认为对磁盘和内存),所以这也可能是你所看到的。 – Holger 2013-02-22 09:36:03

+0

@Aristos,100%cpu不会随后崩溃,但只是挂起。当发生这种情况时,我们看到很多线程实际上试图分配一小块内存,但等待垃圾收集完成。我进一步去看堆中的实际情况,并发现LOH上有很多大字符串。完整的HTML页面字符串使用LOH大小的50%或LOH中字符串实例的大约70%。这就是为什么我问一个'健康的'ASP.NET应用程序是否正常。 – chenz 2013-02-23 09:37:26

+0

@chenz看看这个答案:http://stackoverflow.com/questions/3044752/how-do-i-crash-the-app-pool/3045137#3045137 – Aristos 2013-02-23 09:51:18

相关问题