如何从转储读取Microsoft Logger扩展高内存使用率

时间:2018-09-19 12:09:15

标签: memory asp.net-core memory-leaks .net-core autofac

我在App Service上运行的.NET Core 2 API的内存使用量一直在增长。到了应用程序服务崩溃的地步,我们需要重新启动它。上一次我在Kudu中进行内存转储并在VS2017中打开它。

我是分析此文件的新手,但按包含大小排序,几乎所有日志记录对象都占用大量RAM。参见所附的打印屏幕:

High memory usage

我认为这些资源不会以某种方式被处置。我的Autofac容器配置示例如下:

    var assemblies = new Assembly[]
    {
        Assembly.Load("....")

    };

    builder.RegisterAssemblyTypes(assemblies)
        .Where(t => !t.Name.EndsWith("CachedRepository") && !t.Name.EndsWith("DbCachedRepository"))
        .AsImplementedInterfaces()
        .InstancePerBackgroundJob() // Dispose after Hangfire job
        .InstancePerLifetimeScope(); // Dispose after http request

如何控制Logger对象的处置?

非常感谢。

1 个答案:

答案 0 :(得分:0)

通过阅读David Fowl提供的链接解决了问题。这是一个有已知Azure日志记录问题的github问题。参见https://github.com/aspnet/Logging/issues/821

在禁用Blob记录器之后,一切都解决了。