.net 4.0 w3wp.exe消耗大量RAM

.net 4.0 w3wp.exe消耗大量RAM,.net-4.0,iis-6,.net 4.0,Iis 6,前几天我注意到,在我的服务器上运行的所有w3wp.exe消耗的内存似乎都比我预期的要多。因此,我创建了一个测试web应用程序,其中包含一个aspx页面,然后是一个vanilla global.asax页面(默认方法,无需额外代码)。然后,我将该站点部署到IIS6,目标框架为4.0,内置于发布模式,调试设置为“false”。该站点也在其自己的应用程序池下建立。然后,我使用issapp.vbs来确定这个测试站点运行在哪个w3wp.exe下。我惊讶地发现,一个只有一页的站点使用了将近40mb的ram

前几天我注意到,在我的服务器上运行的所有w3wp.exe消耗的内存似乎都比我预期的要多。因此,我创建了一个测试web应用程序,其中包含一个aspx页面,然后是一个vanilla global.asax页面(默认方法,无需额外代码)。然后,我将该站点部署到IIS6,目标框架为4.0,内置于发布模式,调试设置为“false”。该站点也在其自己的应用程序池下建立。然后,我使用issapp.vbs来确定这个测试站点运行在哪个w3wp.exe下。我惊讶地发现,一个只有一页的站点使用了将近40mb的ram

对于一个单页网站来说,40mb内存似乎太多了。这正常吗?如果正常,为什么?我能做些什么来减少内存占用


我还注意到,每次刷新默认页面时,w3wp.exe都会增加一点。IIS6是否反复缓存同一页?

您正在尝试优化没有加载和客户端的情况。那真的不明智。针对实际用例进行优化


你不会建造一个工厂,然后试图让它尽可能高效地生产一件物品。你试着让它以几十个的速度高效地运行它们。

40Mb用于单个AppDomain(不管你有多少页)是可以的。考虑.NET是一个托管环境,应用程序池包含服务请求的大部分逻辑和堆。在许多情况下,如果RAM不处于争用状态(系统的其他部分要求),那么释放RAM的热情也会降低。
你可以在不同的网站之间共享应用程序池,而沙箱的“开销”与你对什么是可接受的看法不成比例。然而,我认为这一点都不坏。

这不是一个真正的问题,因为这是很正常的。您的.NET Framework正在加载,因此其大小将增加。当真正的问题发生时,您必须使用某些后期制作或分析工具来修复它。分享一些关于内存和后期调试的文章,以备将来需要

http://aspalliance.com/1350_Post_Production_Debugging_for_ASPNET_Applications__Part_1.all
http://blogs.msdn.com/b/tess/archive/2008/09/12/asp-net-memory-issues-high-memory-usage-with-ajaxpro.aspx

我可以建议从IIS 6升级吗?这几乎和IE 6一样可怕。很快有可能吗?是的,事实上,这在不久的将来是可能的。那么,你是否建议同一个站点在IIS7中使用更小的内存占用?可能是的。我相信它会变小。虽然你是对的,但这听起来确实像是一个真正的问题。通过适当的压力测试,我相信内存使用量会成倍增长。我同意你的说法,但至少在我看来,你确实完全回避了这个问题。一个几乎没有代码却什么都不做的网站会消耗这么多内存,这似乎有点荒谬。你需要一个拥有100名工人的大型工厂来生产一辆汽车,这确实有点荒谬——因为你不需要。但是,一个为制造一辆汽车而优化的系统与一个为制造数百辆汽车而优化的系统完全不同。“你有后者,它看起来一点也不像前者,你不应该感到惊讶。”戴维施瓦茨,这是一个很好的类比,它回答了整个问题。问题的关键是:“这正常吗?如果是,为什么?”它回答了这个问题。是的,这很正常。因为软件不是为这个案子设计的。“我能做些什么来减少内存占用吗?”您可以切换到为低负载或更小的应用程序优化的程序,但您可能不想要它。