确定w3wp.exe中保留5.5 GB虚拟内存的人/内容

时间:2008-12-10 12:50:05

标签: asp.net iis memory virtual-memory

在我的机器(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过滤器)启动的进程,如果我尝试自己按顺序启动它调试它只是关闭而没有所有这些大量的内存预留。此外,如果我重新使用它们,命令行参数将无效(这是有道理的,因为它是由调用进程创建的管道)。

我可以在事后将windbg附加到进程(这就是我找到相关内存区域的方式),但我不确定在那时可以确定谁分配了什么。

3 个答案:

答案 0 :(得分:7)

David Wang answers this to a similar question

  

[...] ASP.Net性能开发人员告诉我:

     
      
  • 保留虚拟内存无需担心。你可以查看   它作为性能/缓存的先决条件   CLR。并进行重载测试   表明没什么好担心的   关于。
  •   
  • System.Windows.Forms - 它没有被空的hello world ASPX拉入   页。您可以使用Microsoft调试   工具和“sx e ld   system.windows.forms“来识别什么   实际上是在运行时将其拉入。   或者你可以ildasm找到   依赖。
  •   
  • mscorlib - 确保它是正确的GAC和NGen。
  •   

答案 1 :(得分:3)

虚拟内存只是分配给进程的地址空间。它与内存使用无关。

请参阅:

  1. Virtual Memory
  2. Pushing the Limits of Windows: Virtual Memory
  3. http://support.microsoft.com/kb/555223

答案 2 :(得分:0)

保留内存与已分配内存非常不同。保留内存只是分配地址空间。它不提交任何物理页面。

此地址空间可能由IIS为其堆分配。它只会在需要时提交页面。

如果你真的想从windbg启动w3wp.exe,你可能需要使用有效的命令行参数启动它。您可以使用Process Explorer来确定当前w3wp.exe进程的命令行。例如,在我的服务器上,我的是:

  

c:\ windows \ system32 \ inetsrv \ w3wp.exe -a \。\ pipe \ iisipmeca56ca2-3a28-452a-9ad3-9e3da7b7c765 -t 20 -ap“DefaultAppPool”

我不确定那里的UID是什么指定的,但看起来它可能是由W3SVC服务(启动w3wp.exe)动态生成的,用于命名那里指定的管道。因此,在从windbg启动w3wp之前,一定要查看命令行。