c# - 使用 NLog 或 Serilog 时 .NET Core 3.0 应用程序中的内存泄漏

标签 c# .net-core .net-core-3.0

我在使用记录器时遇到了 .NET Core 3.0 的奇怪问题。

该应用程序在 Windows 上运行正常,但是当我在 Linux (Debian 10) 上将它作为守护程序启动时,它只会占用越来越多的内存。
这个问题第一次是我用NLog的时候出现的,后来我换了Serilog,问题依旧。当我删除 NLog/Serilog 时,问题不存在。

使用内存快照和 Jetbrains dotMemory,我得到的只是一堆由 NLog/Serilog 创建(可能)的 sbyte 数组。

当我禁用记录到文件并只保留控制台记录时 - 问题消失了!

我尝试向垃圾收集器添加手动调用,但这没有帮助。

我们设法通过在 .service 文件中添加 MemoryMax 参数来创建解决方法。似乎垃圾收集器在接近最大限制时开始清理。 (即限制为 150 MB,现在应用程序保持在 145 MB)。

有谁知道可能有什么问题?或者我应该与 NLog 和 Serilog 开发人员一起解决这个问题。

最佳答案

我还注意到高内存消耗。有一些不同的事情可以尝试,包括:

  • using .Destructure.ToMaximumCollectionCount(10)//默认为 int.MaxValue
  • 删除 .Enrich.WithExceptionDetails 以查看内存问题是否神奇地消失
  • 检查 Linux 容器的 Swap 文件内存使用情况,从而设置 Swapiness 值(尽管要注意意外后果)

  • 为了确定内存泄漏发生的位置,您需要分析内存堆以查看哪些对象正在占用内存。

    SeriLog Memory Leak using EF

    关于c# - 使用 NLog 或 Serilog 时 .NET Core 3.0 应用程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59659856/

    相关文章:

    c# - 如何将带有子查询的 SQL 查询转换为 .NET Core 查询

    c# - 使用 .NET core 3.0/System.text.Json 解析 JSON 文件

    c# - JsonConverter 等效于使用 System.Text.Json

    c# threading Timer 需要自己停止异步套接字代码

    c# - 卸载应用程序域时出错。 (Windows 服务中的 HRESULT : 0x80131015), 异常

    c# - 命名空间冲突

    c# - Blazor 请求被 PHP API 上的 CORS 策略阻止

    c# - 将字典序列化为 JSON 时出现奇怪的结果

    c# - 使用 OpenAPI 操作过滤器向需要身份验证的 Controller 端点添加安全要求

    amazon-web-services - 使用yum在Amazon Linux 2中安装.NET Core