Hangfire 1.7.8 服务 Dotnetcore 3.1 高内存使用率,具有许多 TimerQueueTimer



内存探查器数据

我有一个用DotnetCore 3.1和Hangfire 1.7.8编写的服务。 我看到异常高的内存使用率,并且大部分内存被 TimerQueueTimer 对象消耗,尽管我没有显式初始化任何计时器。

由于我最初是在 Dotnetcore 2.2 中创建的,因此它使用旧的服务结构如下:

internal class HangFireService : ServiceBase
{
}

在服务启动时以及任务完成时添加的作业如下所示:

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

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

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

我创建了一个虚拟日志类,并注入到我的所有服务中,并且所有TimerQueueTimer对象都消失了。下面是另一个内存探查器映像:

内存示例

Serilog 使用情况如下:

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

用法:

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

不知何故,serilog 没有释放计时器对象......

最新更新