【发布时间】:2017-11-28 17:10:11
【问题描述】:
我有一个 ASP.NET Core 2 应用程序正在泄漏线程。我如何确定为什么线程永远不会死?
如果我在生产环境中运行该应用程序 10 分钟,IIS 开始出现 502.3 Bad Gateway 错误。我加载了 Process Explorer 并查看了应用程序->Properties->Threads,我看到线程数不断增加:
几乎所有线程都被以下本机堆栈跟踪卡住:
- ntoskrnl.exe!KeWaitForMutexObject+0x8d6
- ntoskrnl.exe!KeDelayExecutionThread+0x9a9
- ntoskrnl.exe!KeWaitForMutexObject+0x1cf
- ntoskrnl.exe!_misaligned_access+0x80d
- ntoskrnl.exe!SeAccessCheck+0x280
- ntoskrnl.exe!KeDelayExecutionThread+0xb49
- ntoskrnl.exe!KeWaitForMutexObject+0x1cf
- ntoskrnl.exe!KeWaitForMultipleObjects+0x2ce
- ntoskrnl.exe!ObWaitForMultipleObjects+0x29c
- ntoskrnl.exe!ObWaitForMultipleObjects+0x713
- ntoskrnl.exe!KeSaveStateForHibernate+0x2a33
- ntdll.dll!ZwWaitForMultipleObjects+0xa
- KERNELBASE.dll!GetProcessHeap+0x62 coreclr.dll+0x4d9c8
- coreclr.dll+0x4db61 coreclr.dll!MetaDataGetDispenser+0x55008
- System.Private.CoreLib.dll+0x58834c
这些本地堆栈跟踪并没有告诉我太多,除了我的网络应用程序正在泄漏线程。虽然 Process Explorer 可以显示完整 .NET 框架应用程序的 .NET 堆栈跟踪,但它不会显示 .NET Core 应用程序的 .NET 堆栈跟踪。
那么,如何调试这样的问题呢?
我无法在本地开发环境中重现此内容。它似乎与高流量或我的生产服务器环境有关。
到目前为止我尝试过的事情:
- 在我的应用中启用标准输出日志:没有关于失败的线索。
- 添加了 AppDomain.UnhandledException 处理程序,写入标准输出。没有线索。
- 查看了 Windows 事件日志。没有线索。
【问题讨论】:
标签: debugging asp.net-core asp.net-core-2.0 thread-dump