我有一个泄露线程的ASP.NET Core 2应用程序。如何确定线程永不死的原因?
如果我在生产中运行应用程序10分钟,IIS会开始吐出502.3 Bad Gateway错误。我加载了Process Explorer并查看了app-> Properties-> Threads,我看到一个不断增加的线程数:
几乎所有线程都停留在以下本机堆栈跟踪中:
除了我的网络应用程序正在泄漏线程之外,这些本机堆栈跟踪并没有告诉我什么。虽然Process Explorer可以显示完整.NET框架应用程序的.NET堆栈跟踪,但它并没有向我展示.NET Core应用程序的.NET堆栈跟踪。
那么,如何调试此类问题?
我无法在我的本地开发环境中重复此操作。它似乎与高流量或我的生产服务器环境有关。
到目前为止我尝试过的事情:
答案 0 :(得分:1)
我setup Remote Debugging在我的服务器上,并且能够从我的开发箱连接到处于不健康状态的应用。
在Visual Studio中连接到此应用程序后,我能够暂停并检查线程。我看到他们正在等待数据库资源。这开启了另一个问题,但对于这个特定的StackOverflow问题,这是一个偏离主题的问题。
我打算将此标记为已解决。这里的课程是你可以使用Remote Debugger + Visual Studio Threads窗口来解释线程泄漏问题。