10

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

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

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

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

更新 1

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

更新 2

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

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

4

4 回答 4

2

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

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

于 2008-12-19T14:39:56.113 回答
1

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

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

于 2017-08-16T12:35:41.700 回答
0

这可能是有用的链接:

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

(以及较早的帖子,这些帖子解释了他正在做的事情的更多背景)

于 2008-12-19T14:40:19.047 回答
-1

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

于 2008-12-19T14:36:56.637 回答