挂日志线程

时间:2018-01-30 12:31:43

标签: c# asp.net-core .net-core

我正在使用带有NLog的asp.net core 2.0.3,我遇到了日志记录(我认为)不会消失的问题。我很感激可能有助于解决这个问题的任何事情(甚至提示如何调试)。

说明

启动应用程序并ping一个端点(似乎无关紧要),创建新线程。在重复多次线程计数建立之后,看起来这些线程没有被杀死。从长远来看,这会导致OutOfMemoryException。

我的调查

似乎问题与日志记录有关,因为在附加到其中一个线程之后,callstack显示以下内容:

(...)
0e 000000be`0923e8b0 00007ff9`942921e8 System_Private_CoreLib!System.Threading.SemaphoreSlim.WaitUntilCountOrTimeout(Int32, UInt32, System.Threading.CancellationToken)$##60020BD+0x90
0f 000000be`0923e900 00007ff9`355b6d12 System_Private_CoreLib!System.Threading.SemaphoreSlim.Wait(Int32, System.Threading.CancellationToken)$##60020BC+0x188
10 000000be`0923e9a0 00007ff9`355b6627 0x00007ff9`355b6d12
11 000000be`0923ea00 00007ff9`a1e29a1f 0x00007ff9`355b6627
12 000000be`0923ea80 00007ff9`a1e29ae6 Microsoft_Extensions_Logging_Console!Microsoft.Extensions.Logging.Console.Internal.ConsoleLoggerProcessor.ProcessLogQueue()$##600004E+0x5f
13 000000be`0923eb20 00007ff9`941bb3ee Microsoft_Extensions_Logging_Console!Microsoft.Extensions.Logging.Console.Internal.ConsoleLoggerProcessor.ProcessLogQueue(System.Object)$##600004F+0x16
14 000000be`0923eb50 00007ff9`94249dc6 System_Private_CoreLib!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)$##6002181+0x6e
15 000000be`0923ebc0 00007ff9`941bb3ee System_Private_CoreLib!System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)$##6002297+0x1a6
16 000000be`0923ec60 00007ff9`948c35d3 System_Private_CoreLib!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)$##6002181+0x6em.Object)$##6002181+0x6e
(...)

知道这一点,我在我的应用程序中注释了 ILogger的所有实例,以及甚至远程连接到自定义日志记录的所有内容(即使用Log方法)。此外,我删除了所有Log<>次注入我的课程。这没有用。 之后我将日志配置更改为:

 "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Error",
      "System": "Error",
      "Microsoft": "Error"
    }
  }

这也没有帮助,因此在绝望中我从Startup.cs删除了任何记录的概念 - 删除loggerFactory.AddNLog()app.AddNLogWeb()等等。不幸的是,这并没有解决我的问题。

1 个答案:

答案 0 :(得分:0)

问题是由于我在启动时将IServiceCollection注入服务集合(services.AddSingleton(x => services);)而导致创建多个数据库连接,从而导致后台日志记录。