当我们部署web应用程序时,我们将所有代码复制到一个新目录中,然后将iis指向该新目录。这样做会增加appdomains的数量,但从不减少。此外,我们的Application_End事件似乎从未触发过。
在某个未知的时间内,尽管perfmon仍报告两组AppDomains,但系统表现非常差,同时GC时间百分比飙升到100%。最终,为了使应用程序再次顺畅运行,我重新启动应用程序池。
额外的信息:在我的开发机上列出应用程序域时显示为2个,在现场服务器上运行4个...我们只有一个应用程序在池中运行,这意味着我们使用的某个库正在创建应用程序域。
我应该怎么做来调试发生的情况?什么会阻止应用程序域卸载?
2021年10月12日更新:
在获得更多详细日志信息后,看起来问题并不是旧的应用程序域仍然存在,而是在重启期间创建了新的应用程序域。应用程序不是启动一个新实例,而是启动两个。有时我们从旧实例获取application_end,有时没有。
2021年10月13日更新:
两件事都发生了。使用进程资源管理器,我可以看到一台机器上仍有旧的应用程序域,而新的应用程序域已经启动。在另一台机器上,只有2个应用程序域,但它们的顺序编号中间出现了断层。因此,启动了两个实例(我们还从应用程序启动获得日志消息),其中一个几乎立即关闭,留下了2个应用程序域。
在某个未知的时间内,尽管perfmon仍报告两组AppDomains,但系统表现非常差,同时GC时间百分比飙升到100%。最终,为了使应用程序再次顺畅运行,我重新启动应用程序池。
额外的信息:在我的开发机上列出应用程序域时显示为2个,在现场服务器上运行4个...我们只有一个应用程序在池中运行,这意味着我们使用的某个库正在创建应用程序域。
我应该怎么做来调试发生的情况?什么会阻止应用程序域卸载?
2021年10月12日更新:
在获得更多详细日志信息后,看起来问题并不是旧的应用程序域仍然存在,而是在重启期间创建了新的应用程序域。应用程序不是启动一个新实例,而是启动两个。有时我们从旧实例获取application_end,有时没有。
2021年10月13日更新:
两件事都发生了。使用进程资源管理器,我可以看到一台机器上仍有旧的应用程序域,而新的应用程序域已经启动。在另一台机器上,只有2个应用程序域,但它们的顺序编号中间出现了断层。因此,启动了两个实例(我们还从应用程序启动获得日志消息),其中一个几乎立即关闭,留下了2个应用程序域。