Unity未被处理导致服务器锁定



我们有一个大约有40台服务器的服务器群,我们每隔几周就会向其投放代码。当我们运行代码时,我们注意到的一件事是,在部署程序集并执行IIS重置并将其放回BigIp (F5)后,它接收到流量,服务器将锁定大约10分钟,客户端将旋转直到最终超时。

查看性能,我们可以看到finally的数量和固定对象的数量急剧增加,这促使我调查内存问题。

所以我开始研究Unity的IoC配置。在global.asax.cs中,我们注册了大约15个接口,其中大多数使用ContainerControlledLifetimeManager来管理生命周期。通常情况下,除了这十分钟的窗口,代码从来没有问题,所以我的第一个想法是内存或资源管理问题。

有没有人知道如果你必须明确地处置()你的统一容器或这是由统一自动处理的某种方式?我今天注意到,Application_End没有Dispose布线,所以我的想法是,也许当服务器在IIS重置后重新启动时,有一个Unity或对象资源问题,直到GC出现并释放内存(需要十分钟)。

任何帮助都是感激的!

执行iisreset将杀死当前正在运行的w3wp.exe进程,因此不太可能在Application_End中正确处理unity对象会导致启动时的性能问题。有可能旧的web进程没有正确释放新web进程所依赖的文件系统或其他资源,但我认为如果是这种情况,你会看到文件访问或其他一些错误。

由于您正在执行iisreset,因此我会仔细查看应用程序第一次启动时运行的代码。也许有一些组件需要很长时间才能启动(例如,有一个从数据库下载和缓存一堆东西的单例类型类),这可能会导致速度变慢,可能只有在处理所有等待的HTTP请求的压力下。另外,请记住ASP。. NET在编译要第一次使用的应用程序时会产生一堆开销。因为看起来你的web应用程序在负载均衡器之后,你可能想要想出一种方法,在你将web服务器添加回负载均衡器之前,在每个单独的web服务器上"启动"应用程序,这可以通过在该web服务器上本地加载页面来完成。启动应用程序将允许web应用程序初始化自己,而不必处理任何外部请求,这应该会缩短启动时间。

长话短说,我会调查启动问题,看看在我专注于关机问题之前我能做些什么。

最新更新