【问题标题】:w3wp.exe consuming large amount of RAMw3wp.exe 消耗大量内存
【发布时间】:2011-11-17 00:00:04
【问题描述】:

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

40mb 的 RAM 对于单页网站来说似乎很多。这是正常的吗?如果是,为什么?有什么办法可以减少内存占用吗?

我还注意到,每次刷新默认页面时,w3wp.exe 都会增长一点。 IIS6 是否一遍又一遍地缓存同一个页面?

【问题讨论】:

  • 我可以建议从 IIS 6 升级吗?它几乎和 IE 6 一样可怕。很快就有可能吗?
  • 是的,实际上这在不久的将来是有可能的。您是否建议在 IIS7 中以较小的内存占用运行同一站点?
  • 可能是的。我相信它会更小。

标签: .net-4.0 iis-6


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您正在尝试优化没有负载且没有客户端的情况。这实在是不明智。针对实际用例进行优化。

    您不会建造工厂,然后试图让它尽可能高效地生产一件物品。你试着让它高效地生产几十个。

    【讨论】:

    • 虽然您是对的,但这听起来确实是个问题,通过适当的压力测试,我相信内存使用量会成倍增长。
    • 我同意你的说法,但至少在我看来,你确实完全避免了这个问题。一个几乎没有代码但实际上什么都不做的网站会消耗这么多内存,这似乎有点荒谬。
    • 你需要一个拥有 100 名工人的巨型工厂来制造一辆汽车,这似乎有点荒谬——因为你不需要。但是为制造一辆汽车而优化的系统看起来不像为制造数百辆汽车而优化的系统。你有后者,不应该对它看起来不像前者感到惊讶。
    • @DavidSchwartz 这是一个很好的类比
    • 它回答了整个问题。问题的关键是:“这正常吗?如果是,为什么?”它回答了。是的,这很正常。这是因为该软件不是为这种情况设计的。 “我能做些什么来减少内存占用吗?”您可以切换到针对较低负载或较小应用程序优化的程序,但您可能不想要它。
    【解决方案3】:

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

    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

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 2022-01-16
      • 2014-01-04
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多