我仍在尝试了解持续存在的问题,但它几乎可以概括为无法卸载 AppDomain。
它发生在将 ASP.NET WebAPI 部署到 Azure 应用服务期间,我们观察到的情况如下:
“在 w3wp_12396.dmp 中,应用程序 /LM/W3SVC/1523308129/ROOT 的 HttpRuntime 正处于关闭过程中。”
分析内存转储,我们看到设置了IsAbortRequested标志的线程,但它们似乎永远不会完成(!threads此处 WinDbg 的输出: https: //pastebin.com/7CXYcffy)
在内存转储中,我们还看到许多具有“ UNLOAD_REQUESTED ”阶段的 AppDomain,它们似乎从未完成卸载(完整输出!DumpDomain位于: https: //pastebin.com/kahZQuWN)
域 7:000001c67062c800 低频堆:000001c67062cff8 高频堆:000001c67062d088 存根堆:000001c67062d118 阶段:UNLOAD_REQUESTED 安全描述符:000001c6705c5680 名称:/LM/W3SVC/1523308129/ROOT-6-131687140950004974
未检测到死锁!dlk(至少通过 WinDbg SOSEX 插件的命令,通常涵盖大多数死锁情况)
没有代码取消线程中止(没有Thread.ResetAbort()调用)
现在解决问题的唯一方法是终止进程(停止 Azure AppService)。
AppDomain无法卸载的可能原因有哪些?
更新。在线程堆栈中,我们得到一个提示,它可能与我们的自定义 Azure Blob Log4net 附加程序有关,我发现当创建此类附加程序时(每个应用程序一次),它会生成具有以下结构的新线程。 …