【问题标题】:Worker process recycles because it reached its virtual memory limit工作进程因达到其虚拟内存限制而回收
【发布时间】:2010-09-27 17:19:17
【问题描述】:

我们为我们的客户托管一个相当大的(自行编写的)ASP.NET 网站。它由一个 Web 服务、一个网站和一个图像服务网站组成,这三者都在它们自己的虚拟目录中。三个虚拟目录一起在一个应用程序池中。该池的内存限制(最大虚拟内存和最大使用内存)都设置为 500 兆字节。

但是,应用程序池会遭受多次回收,即使一次只有一个用户也是如此。 事件日志消息说:

进程 ID 为“xxxx”的工作进程为应用程序池“xxxx”提供服务,已请求回收,因为它已达到其虚拟内存限制。

但是,使用 Process Explorer 观察工作进程没有显示任何支持此消息的信息。我应该观察哪些计数器来观察实际上受这两种设置限制的内存?

更新 1

在任务管理器中观察进程会显示大约 100 MB 的“内存使用情况”和“虚拟机大小”,但进程仍会因上述消息而被回收。服务器上可用的 5 GB 物理内存...

更新 2

虽然网站相当大,但问题集中在应用程序的一小部分。它执行查询(使用 Oracle)并将结果绑定到 gridview 和转发器 web 控件。结果包括一个简短的描述和一个图标(通过图像服务网站加载)。如果我一个接一个地执行 10 个搜索操作,每个操作给出 9 个结果,工作过程显示 mem 使用情况和 vm 大小约为 100 MB 并回收......

更新 3 切换图像服务网站的使用不会产生更好的结果。所以我认为可以说问题出在其他地方。

【问题讨论】:

    标签: .net iis-6 application-pool


    【解决方案1】:

    尝试使用 Windows 任务管理器。在进程选项卡上,转到查看菜单并选择选择列。选择 Virtual Memory Size 列,然后观察 asp.net 工作进程的值。

    【讨论】:

    • 没有虚拟内存大小列。
    【解决方案2】:

    作为观察... 如果您的“图像服务”站点恰好进行任何内联图像处理/生成,您可以通过不在任何一次性资源上调用 Dispose() 来快速占用内存 - 特别是那些包装原生功能的资源......

    这不是您问题的直接答案,但它可能有助于调查导致内存使用泛滥的潜在问题。

    【讨论】:

    • 那一定是一个相当繁重的应用程序,如果它与一个用户一起使用 foobar!
    【解决方案3】:

    这可能是有用的链接:

    http://blogs.msdn.com/tom/archive/2008/06/25/asp-net-tips-finding-what-is-taking-up-memory.aspx

    (以及更早的文章解释了他正在做的事情的更多背景)

    【讨论】:

      【解决方案4】:

      当我们将内存大小从 4Gb 升级到 8Gb(讽刺地)时,我在使用虚拟机时遇到了同样的问题。我发现这个博客解释了我们可以在 64 位系统上使用“私有内存限制”但不能使用“虚拟内存限制”,因为:“如果你在 64 位平台上(我是),ASP.NET 应用程序会积极保留虚拟内存” .

      http://blog.walteralmeida.com/2011/07/iis7-private-memory-limit-versus-virtual-memory-limit.html

      【讨论】:

        猜你喜欢
        • 2011-08-03
        • 2022-01-01
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        相关资源
        最近更新 更多