【问题标题】:Determine who/what reserved 5.5 GB of virtual memory in w3wp.exe确定谁/什么在 w3wp.exe 中保留了 5.5 GB 的虚拟内存
【发布时间】: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


【解决方案1】:

王大卫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。

【讨论】:

    【解决方案2】:

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

    见:

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

    【讨论】:

    • 保留的虚拟内存量会影响进程的“Virtual Size”,这使得asp.net中基于虚拟内存限制的进程回收无用。
    • 那是什么意思?由于寻址需求增加,VM 可能会增加。我不确定这是否会变得太大。我不能真正测试,这里只有 32 位 Vista。您将获得最大 3GB 的 VM AFAIK,但每个进程最多只能获得大约 2GB 的实际内存。
    【解决方案3】:

    预留内存与分配内存有很大不同。保留内存只是分配地址空间。它不会提交任何物理页面。

    此地址空间可能由 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 之前,您绝对应该查看您的命令行。

    【讨论】:

    • 这些命令行参数是一次性的,不能重复使用,我试过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2017-12-08
    • 1970-01-01
    • 2013-07-19
    • 2021-06-25
    相关资源
    最近更新 更多