前几天我注意到,在我的服务器上运行的所有w3wp.exe似乎都比我预期的消耗了更多的内存。所以我用一个aspx页面和一个普通的global.asax页面创建了测试web应用程序(默认方法,不需要额外的代码)。然后,我将该站点部署到IIS6,目标框架为4.0,在发布模式下构建,debug设置为"false“。该站点也设置在它自己的应用程序池下。然后,我使用issapp.vbs找出这个测试站点在哪个w3wp.exe下运行。我很惊讶地看到,只有一个页面的单个站点使用了近40mb的ram。
对于一个单页面的网站来说,40mb的RAM似乎很多。这是正常的吗?如果是,为什么?我能做些什么来减少内存占用吗?
我还注意到,每次刷新默认页面时,w3wp.exe都会增长一点。IIS6是否一遍又一遍地缓存同一页?
发布于 2011-11-17 08:41:13
40Mb的单个AppDomain (不管你有多少个页面)是可以的。考虑到.NET是一个托管环境,并且应用程序池包含用于服务请求的大部分逻辑和堆。在许多情况下,如果RAM没有处于争用状态(系统的其他部分要求),它也不会那么急于释放RAM。你可以在不同的网站之间共享应用程序池,沙箱的“开销”与你对什么是可接受的看法变得不成比例。然而,我并不认为这是一件坏事。
发布于 2011-11-17 08:03:14
您正在尝试优化没有负载且没有客户端的情况。这真的是不明智的。针对实际用例进行优化。
你不会建立一个工厂,然后试图让它尽可能高效地生产一件物品。你试着让它有效地把它们造出几十个。
发布于 2011-11-17 09:29:39
这并不是一个真正的问题,因为这是很正常的。您的.NET框架正在加载,因此大小。当真正的问题发生时,您将不得不使用某些后期制作或分析工具来修复它。分享一些关于内存和后期生产调试的文章,以备将来需要。
http://msdn.microsoft.com/en-us/magazine/cc188781.aspx http://aspalliance.com/1350_Post_Production_Debugging_for_ASPNET_Applications__Part_1.all http://blogs.msdn.com/b/tess/archive/2006/09/06/net-memory-usage-a-restaurant-analogy.aspx http://blogs.msdn.com/b/tess/archive/2008/09/12/asp-net-memory-issues-high-memory-usage-with-ajaxpro.aspx
https://stackoverflow.com/questions/8160457
复制相似问题