Hangfire 1.7.8服务Dotnetcore 3.1具有很多TimerQueueTimer实例的高内存使用率

问题描述 投票:0回答:1

Memory profiler data

我有一个用Hangfire 1.7.8用DotnetCore 3.1编写的服务。我看到异常高的内存使用率,并且大多数内存被TimerQueueTimer对象占用,尽管我没有明确初始化任何Timer。

因为我最初是在Dotnetcore 2.2中创建的,所以它使用的是这样的旧服务结构:

internal class HangFireService : ServiceBase
{
}

在服务启动时以及任务完成时添加了这样的作业:

if(!_hangfireHelper.GetJobs(typeof(GenericTask), taskName).Any())
            {
                BackgroundJob.Schedule<GenericTask>(d => d.RunTask(null), TimeSpan.FromMinutes(5));
            }

如何减少计时器的使用量?

c# .net-core windows-services hangfire
1个回答
0
投票

最后证明,与Hangfire无关,但高内存使用率的根本原因是Serilog。

我创建了一个虚拟日志类,并将其注入到我的所有服务中,并且所有TimerQueueTimer对象都消失了。这是另一个memoryprofiler图像:

Memory sample

Serilog用法如下:

public Logger Logger()
       {

            var log = new LoggerConfiguration()
                .ReadFrom.Configuration(_configuration)
                .CreateLogger();
            return log;
        }

用法:

using( var log = Logger())
{
   log.LogInformation(...)
}

以某种方式serilog没有处理计时器对象...

© www.soinside.com 2019 - 2024. All rights reserved.