gpt4 book ai didi

debugging - AspNetCore 应用程序在生产中泄漏线程 - 如何调试?

转载 作者:行者123 更新时间:2023-12-04 16:08:22 25 4
gpt4 key购买 nike

我有一个正在泄漏线程的 ASP.NET Core 2 应用程序。我如何确定线程永不消亡的原因?

如果我在生产环境中运行该应用程序 10 分钟,IIS 开始吐出 502.3 Bad Gateway 错误。我加载了 Process Explorer 并查看了 app->Properties->Threads,我看到一个不断增加的线程数:

enter image description here

几乎所有线程都卡在以下 native 堆栈跟踪中:

  1. ntoskrnl.exe!KeWaitForMutexObject+0x8d6
  2. ntoskrnl.exe!KeDelayExecutionThread+0x9a9
  3. ntoskrnl.exe!KeWaitForMutexObject+0x1cf
  4. ntoskrnl.exe!_misaligned_access+0x80d
  5. ntoskrnl.exe!SeAccessCheck+0x280
  6. ntoskrnl.exe!KeDelayExecutionThread+0xb49
  7. ntoskrnl.exe!KeWaitForMutexObject+0x1cf
  8. ntoskrnl.exe!KeWaitForMultipleObjects+0x2ce
  9. ntoskrnl.exe!ObWaitForMultipleObjects+0x29c
  10. ntoskrnl.exe!ObWaitForMultipleObjects+0x713
  11. ntoskrnl.exe!KeSaveStateForHibernate+0x2a33
  12. ntdll.dll!ZwWaitForMultipleObjects+0xa
  13. KERNELBASE.dll!GetProcessHeap+0x62 coreclr.dll+0x4d9c8
  14. coreclr.dll+0x4db61 coreclr.dll!MetaDataGetDispenser+0x55008
  15. System.Private.CoreLib.dll+0x58834c

除了我的 Web 应用程序正在泄漏线程外,这些 native 堆栈跟踪并没有告诉我太多信息。虽然 Process Explorer 可以向我显示完整 .NET 框架应用程序的 .NET 堆栈跟踪,但它不会向我显示 .NET Core 应用程序的 .NET 堆栈跟踪。

那么,如何调试这样的问题呢?

我无法在我的本地开发环境中重现它。它似乎与高流量或我的生产服务器环境有关。

到目前为止我尝试过的事情:

  • 我的应用程序启用了 stdout 日志:没有关于失败的线索。
  • 添加了一个 AppDomain.UnhandledException 处理程序,写入标准输出。没有线索。
  • 查看 Windows 事件日志。没有线索。

最佳答案

setup Remote Debugging在我的服务器上,并且能够从我的开发箱连接到处于不健康状态的应用程序。

在 Visual Studio 中连接到此应用后,我就可以暂停并检查线程。我看到他们正在等待数据库资源。这就提出了另一个问题,但对于这个特定的 StackOverflow 问题来说,这是题外话。

我要把它标记为已解决。这里的教训是您可以使用 Remote Debugger + Visual Studio Threads 窗口来阐明线程泄漏问题。

关于debugging - AspNetCore 应用程序在生产中泄漏线程 - 如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47537253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com