我们有一个 .NET webapi 应用程序(带有服务自动启动提供程序)。
应用程序由我们的 buildserver 构建,输出部署到多个服务器,对应用程序的请求通过负载均衡器路由。
该网站几个月来一直表现良好。几天前,我们注意到应用程序池在三分之二的服务器上使用的内存是前几天的 3 倍。
即使我们 iisreset、重新启动服务器等,现在使用的内存比其他服务器更多的服务器也在这样做。应用程序池在启动后立即分配比另一个多 3 倍的内存。
现在到超级奇怪的东西......
为了找出内存中的内容,我将 dotTrace 分析器(远程,使用 remoteagent.exe)“附加”到其中一台服务器上。池似乎在回收,一旦启动它就不再分配 3x 内存(因此内存快照是无用的)。我从工作进程中“分离”了分析器,并注意到应用程序池不再使用 3x 内存。我重新启动了服务器,它仍然没有使用 3x 内存。
所以......似乎只是将探查器附加到 w3wp 进程,以一种持久的方式解决了我的问题,因为在 iisreset 和重新启动后它仍在处理“低内存使用”。
在遭受相同问题的服务器#2上尝试了相同的程序,它也解决了我的问题。
似乎 dotTrace 对我的工作进程有什么神奇作用:)?
任何人都可以找出原因吗?我有更多的服务器(在其他环境中)有同样的问题,但我想知道这个问题的根本原因。