【问题标题】:w3wp high memory usage from one day to anotherw3wp 内存使用量从一天到另一天
【发布时间】:2017-09-22 12:12:24
【问题描述】:

我们有一个 .NET webapi 应用程序(带有服务自动启动提供程序)。

应用程序由我们的构建服务器构建,输出部署到多个服务器,对应用程序的请求通过负载均衡器路由。

该网站几个月来一直表现良好。几天前,我们注意到应用程序池在三分之二的服务器上使用的内存是前几天的 3 倍。

即使我们 iisreset、重新启动服务器等,现在比其他服务器使用更多内存的服务器也在这样做。应用程序池在启动后立即分配比其他服务器多 3 倍的内存。

现在是超级奇怪的东西......

为了找出内存中的内容,我将 dotTrace 分析器(远程,使用 remoteagent.exe)“附加”到其中一台服务器。池似乎在回收,一旦启动它就不再分配 3x 内存(因此内存快照是无用的)。我从工作进程中“分离”了分析器,并注意到应用程序池不再使用 3x 内存。我重新启动了服务器,它仍然没有使用 3x 内存。

所以...似乎只是将探查器附加到 w3wp 进程,以一种持久的方式解决了我的问题,因为在 iisreset 并重新启动后,它仍在处理“低内存使用”。

在遇到同样问题的服务器 #2 上尝试了相同的程序,它也解决了我的问题。

似乎 dotTrace 对我的工作进程做了一些神奇的事情 :)?

任何人都可以找出原因吗?我有更多的服务器(在其他环境中)有同样的问题,但我想知道这个问题的根本原因。

【问题讨论】:

    标签: iis memory w3wp dottrace


    【解决方案1】:

    简答: 我发现原因是 Microsoft Monitoring Agent 的分析器连接到我的 w3wp 进程。

    长答案:

    事件日志中的详细信息

    .NET Runtime version 4.0.30319.34014 - The profiler was loaded successfully.  Profiler CLSID: '{AD5651A8-B5C8-46CA-A11B-E82AEC2B8E78}'.  Process ID (decimal): xxxx.  Message ID: [0x2507].
    

    让我得出结论,另一个分析器正在附加到 w3wp 上。在注册表中搜索 CLSID 很明显,监控代理参与其中。可以通过首先浏览 Windows 注册表来禁用探查器:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS
    

    和变化:

    Environment = COR_PROFILER={AD5651A8-B5C8-46ca-A11B-E82AEC2B8E78} Cor_Enable_Profiling=1
    

    到:

    Environment = COR_PROFILER={AD5651A8-B5C8-46ca-A11B-E82AEC2B8E78} Cor_Enable_Profiling=0
    

    我猜想禁用分析比直接更改注册表更好的方法,(也许卸载 Microsoft Monitoring Agent?)

    ...为什么分析器会导致 3 倍的内存消耗仍然是一个谜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多