簡體   English   中英

.Net 5 IHost FileSystemWatcher memory 泄漏

[英].Net 5 IHost FileSystemWatcher memory leak

我目前正在開發一個類似插件的系統,該系統需要在運行時加載程序集。

根應用程序將作為 windows 服務運行,並將為每個“插件”創建一個 IHost,以便每個插件都可以擁有自己的 DI 容器。

我開始對其進行壓力測試,以查看在停止/啟動“插件”時是否有任何 memory 泄漏。 停止/啟動涉及停止 IHost 並處理它,然后啟動一個新的。 我發現某處有一個小的 memory 泄漏。 似乎每重新啟動 1000 次,我就會獲得 10-50mb。

這並不可怕,但它讓我覺得我沒有正確處理某些東西。 我最終發現只是啟動/停止默認 IHost 似乎會導致類似的問題(盡管程度較輕)。 下面是一個簡單的控制台應用程序,幾乎可以顯示我在做什么,您可以看到它只是緩慢但始終如一地獲得 memory 的使用。 我可以看到 GC 正在運行,所以我認為它永遠不會被清理。

class Program
{
    private static async Task Main(string[] args)
    {
        while (true)
        {
            var host = Host.CreateDefaultBuilder().Build();
            await host.StartAsync();

            await host.StopAsync();
            host.Dispose();
        }
    }
}

這是 memory 快照。 你可以看到有一些東西在不斷地積累。 突出顯示的項目數量似乎與出現的外觀數量相結合。

所以對我來說,似乎在 IHost 中的某個時間點創建了一個文件觀察程序,但沒有正確處理。 我猜它可能是配置文件之一?

內存快照

我添加了 WriteLine 來跟蹤已發生的循環數並運行了幾分鍾。 該應用程序從使用 memory 的 ~10-20mb 開始,但經過 17000 次循環后,它已達到 200mb+。 這是在每個循環結束時調用 GC.Collect 和 GC.WaitForPendingFinalizers。

循環計數的內存使用情況

我的問題是這是否是一個問題。 如果不是,我是否將其診斷為 memory 泄漏?

它可能不會影響我,因為我預計不會有數千次重啟,但如果這實際上是泄漏,是否值得在 github 上創建問題?

編輯:

我想我已經確認這是 memory 泄漏。 如果我通過在.Build()之前添加以下內容來刪除所有配置源,則 memory 問題就會消失。

ConfigureAppConfiguration(config =>
{
    config.Sources.Clear();
})

這是我應該在https://github.com/dotnet/aspnetcore/issues添加的問題嗎?

正如我在編輯中所說,它看起來是由於配置設置造成的。

在 ASP Net Core Github 上提出了問題,但看起來其他人幾天前已經報告過了。

似乎 David Fowler 已經在 .Net 6 預覽版中添加了拉取請求,因此應該為 .Net 6 修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM