w3wp从一天到另一天的高内存使用率

时间:2017-04-25 12:58:16

标签: iis memory w3wp dottrace

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

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

该网站连续几个月表现良好。几天前,我们注意到应用程序池使用的内存比前一天多3倍,在3台服务器中有2台。

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

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

为了找出记忆中被耽搁的东西,我附上" dotTrace探查器(远程,使用remoteagent.exe)到其中一个服务器。该池似乎是循环使用的,一旦启动它就不再分配3倍内存(因此内存快照无用)。我" delaached"来自工作进程的探查器,并注意到应用程序池不再使用3x内存。我重新启动了服务器,它仍然没有使用3x内存。

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

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

似乎dotTrace对我的workerprocesses做了一些魔术:)?

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

1 个答案:

答案 0 :(得分: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倍内存消耗仍然是个谜。