标签: domainunload

AppDomain 卸载卡住的原因

我仍在尝试了解持续存在的问题,但它几乎可以概括为无法卸载 AppDomain

它发生在将 ASP.NET WebAPI 部署到 Azure 应用服务期间,我们观察到的情况如下:

  1. 进程 ID 不会更改,新部署托管在同一进程中(AFAIU 它是通过卸载旧 AppDomain 并使用更新的二进制文件启动新 AppDomain 来完成的)
  2. Azure PaaS 诊断在错误部分显示以下内容:

“在 w3wp_12396.dmp 中,应用程序 /LM/W3SVC/1523308129/ROOT 的 HttpRuntime 正处于关闭过程中。”

  1. 分析内存转储,我们看到设置了IsAbortRequested标志的线程,但它们似乎永远不会完成(!threads此处 WinDbg 的输出: https: //pastebin.com/7CXYcffy

  2. 在内存转储中,我们还看到许多具有“ UNLOAD_REQUESTED ”阶段的 AppDomain,它们似乎从未完成卸载(完整输出!DumpDomain位于: https: //pastebin.com/kahZQuWN

域 7:000001c67062c800
低频堆:000001c67062cff8
高频堆:000001c67062d088
存根堆:000001c67062d118
阶段:UNLOAD_REQUESTED
安全描述符:000001c6705c5680
名称:/LM/W3SVC/1523308129/ROOT-6-131687140950004974
  1. 未检测到死锁!dlk(至少通过 WinDbg SOSEX 插件的命令,通常涵盖大多数死锁情况)

  2. 没有代码取消线程中止(没有Thread.ResetAbort()调用)

现在解决问题的唯一方法是终止进程(停止 Azure AppService)。

AppDomain无法卸载的可能原因有哪些?

更新。在线程堆栈中,我们得到一个提示,它可能与我们的自定义 Azure Blob Log4net 附加程序有关,我发现当创建此类附加程序时(每个应用程序一次),它会生成具有以下结构的新线程。 …

.net appdomain azure domainunload azure-web-app-service

5
推荐指数
1
解决办法
1592
查看次数