【发布时间】:2008-12-10 12:50:05
【问题描述】:
在我的机器 (XP, 64) 上,ASP.net 工作进程 (w3wp.exe) 总是在启动时保留 5.5GB 的虚拟内存。无论它托管的 Web 应用程序如何(它可以是任何东西,甚至是 aspx 中的空网页),都会发生这种情况。
这个大的旧虚拟内存块在进程开始时被保留,所以这不是某种逐渐的内存“泄漏”。
使用windbg 进行的一些窥探表明内存问题是Private、Reserved 和RegionUsageIsVAD,这表明它可能是调用VirtualAlloc 的人的工作。它还表明,有问题的内存被分配/保留在 4 个大块中,每个 1GB 和几个较小的块(每个 1/4GB)。
所以我想我需要弄清楚是谁在调用 VirtualAlloc 并保留所有这些内存。我该怎么做?
在内存分配之前将调试器附加到进程是很棘手的,因为 w3wp.exe 是由 svchost.exe 启动的进程(即 IIS/ASP.Net 过滤器),如果我尝试自己按顺序启动它调试它只是关闭而没有所有这些大量的内存保留。此外,如果我重用命令行参数,它们将无效(这是有道理的,因为它是由调用进程创建的管道)。
我可以在事后将它附加到进程中(这就是我找到有问题的内存区域的方式),但我不确定当时是否可以确定谁分配了什么。
【问题讨论】:
-
我只想说
“天哪” ! -
这是我见过的新
标签的第一个相关用途(当然是在 NBC.com 的英雄页面之外)! -
我在 Server 2008、IIS7 上看到了同样的行为
标签: asp.net iis memory virtual-memory