工作进程回收,因为它达到了虚拟内存限制

时间:2008-12-19 14:26:48

标签: .net iis-6 application-pool

我们为客户提供了一个相当大的(自编)ASP.NET网站。它由一个Web服务,一个Web站点和一个提供图像的Web站点组成,这三个站点都位于自己的虚拟目录中。三个虚拟目录在一个应用程序池中。该池具有内存限制(最大虚拟内存和最大已用内存)设置为500兆字节。

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

  

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

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

更新1

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

更新2

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

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

4 个答案:

答案 0 :(得分:1)

正如观察一样...... 如果您的“图像服务”网站碰巧进行任何内联图像处理/生成,您可以通过不在任何可支配资源上调用Dispose()来快速吞噬内存 - 特别是那些包含本机功能的资源......

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

答案 1 :(得分:0)

尝试使用Windows任务管理器。在“进程”选项卡上,转到“视图”菜单,然后选择“选择列”。选择Virtual Memory Size列,然后观察asp.net worker进程的值。

答案 2 :(得分:0)

这可能是有用的链接:

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

(以及之前的帖子解释了他正在做的事情的更多背景)

答案 3 :(得分:0)

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

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