代码之家  ›  专栏  ›  技术社区  ›  Michiel Overeem

工作进程由于达到其虚拟内存限制而被回收

  •  9
  • Michiel Overeem  · 技术社区  · 16 年前

    我们主持了一个相当大的会议(自编)ASP.NET我们的客户网站。它由一个web服务、一个web站点和一个图像服务web站点组成,三者都位于各自的虚拟目录中。三个虚拟目录一起位于一个应用程序池中。池的内存限制(最大虚拟内存和最大已用内存)都设置为500 MB。

    但是,应用程序池会遭受许多回收,即使一次只有一个用户。

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

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

    更新1

    观察taskmanager中的进程,会发现“mem usage”和“vm size”约为100mb,但进程仍会与上面的消息一起循环使用。服务器上可用的5 GB物理内存。。。

    更新2

    虽然网站相当大,但问题集中在应用程序的一小部分。它执行一个查询(使用Oracle)并将结果绑定到gridview和repeaterwebcontrol。结果包括一个简短的描述和一个图标(通过图像服务网站加载)。如果我依次执行10个搜索操作,每个操作给出9个结果,工作过程会显示内存使用情况和大约100MB的虚拟机大小,并回收。。。

    更新3 切换图像服务网站的使用不会产生更好的结果。所以我认为公平地说问题是另外一回事。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Andrew Rollings    16 年前

    如果您的“图像服务”站点碰巧进行了任何内联图像处理/生成,您可以通过不调用 Dispose() 在任何一次性资源上-特别是那些包装本机功能的资源。。。

    这并不能直接回答你的问题,但它可能有助于深入研究导致内存使用泛滥的根本问题。

        2
  •  1
  •   Matt Roy    7 年前

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

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

        3
  •  0
  •   Will Dean    16 年前

    这可能是一个有用的链接:

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

    (以及之前的文章,这些文章解释了他所做的事情的更多背景)

        4
  •  -1
  •   DCNYAM    16 年前

    尝试使用Windows任务管理器。在“进程”选项卡上,转到“视图”菜单并选择“选择列”。选择虚拟内存大小列,然后观察asp.net辅助进程。