2017-04-25 56 views
0

我们有一个.NET webapi应用程序(带有服务自动启动提供程序)。w3wp从一天到另一天的高内存使用量

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

该网站已经运行好几个月了。几天前,我们注意到应用程序池使用的内存比前一天多出3倍,在3台服务器中有2台。

,现在使用更多的内存比其他的服务器就是这么做的,即使我们IISRESET,重新启动服务器等。applicationpool被启动后比其他的分配马上3倍更多的内存。

现在到了超怪异的东西....

要了解被关押了什么在内存,I“附加”一个dotTrace探查器(遥控器,使用remoteagent.exe)到一个服务器。池似乎回收,一旦它启动,它不再分配3倍的内存(所以内存快照是无用的)。我从工作进程中“分离”了剖析器,发现应用程序池不再使用3x内存。我重新启动了服务器,并且仍然没有使用3x内存。

因此...似乎只是将探查器连接到w3wp进程,以一种持久的方式解决了我的问题,因为它仍然在iisreset和重新启动后使用“低内存使用情况”。

试图在服务器#2遭遇了同样的问题,同样的程序,也固定我的问题。

好像dotTrace做这样神奇的东西我workerprocesses :)?

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

回答

0

简短回答: 我发现原因是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很明显涉及监控代理。

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

和改变:探查器可以先浏览Windows注册表被禁用

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

到:

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

我想,有一个更好的方法来禁用分析比直接更改注册表,(也许卸载微软监控代理?)

。W剖析器导致3倍内存消耗仍然是一个谜。

相关问题