【问题标题】:asp.net core self hosted app leaks on webhost respawnwebhost respawn上的asp.net核心自托管应用程序泄漏
【发布时间】:2019-01-22 08:27:05
【问题描述】:

我有一个自托管的 asp.net 核心应用程序,它需要偶尔使用新的上下文重新生成其 WebHost。应用在 asp.net DI 容器中将共享资源注册为单例。

            services.AddSingleton<MyDep>();

控制器依赖于共享资源:

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    public MyDep Dep { get; }

    public ValuesController(MyDep dep)
    {
        Dep = dep;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] {
            new string(Dep.Content),
            "value2" };
    }
 }

它泄露了绑定到前一个实例的资源。我使用演示应用程序重现了该问题(稍微修改了 asp.net core api 项目模板)。

public static void Main(string[] args)
    {
        var p = new Program();
        while (true)
        {
            p.Boot(args);
            GC.Collect(2, GCCollectionMode.Forced, true);
        }
    }

    private void Boot(string[] args)
    {
        webHost = CreateWebHostBuilder(args).Build();
        webHost.RunAsync();
        Thread.Sleep(5000);
        webHost.StopAsync().Wait();
        webHost.Dispose();
    }

我看到 n 个控制器实例,其中 n 是对控制器的 http 请求数 - 控制器根本没有被处理。 Profiler 在链的末尾使用 System.Threading.OverlappedData 指示到根的长路径。你能建议这个设置有什么问题吗? sample app

path to root

【问题讨论】:

    标签: c# asp.net-core memory-leaks


    【解决方案1】:

    我看到了 n 个控制器实例,其中 n 是对控制器的 http 请求数

    这是预期的行为。默认为每个请求创建控制器。

    来自your snapshot 我没有看到有多个MyDep 实例。快照显示了Func&lt;ValueController, MyDep&gt; 的实例,这不是预期的单例。如果您调用委托,您将在不同的请求中获得相同的MyDep 实例。一般来说,这里没有错。您正在跟踪错误的类型。

    【讨论】:

      【解决方案2】:

      好的,我为所描述的问题显示了错误的跟踪。尽管如此,上下文并未正确释放。

      我找到了解决方案:IApplicationLifecycle.StopApplication 如此处所述 -> https://www.blakepell.com/asp-net-core-ability-to-restart-your-site-programatically-updated-for-2-0

      上下文被正确释放,内存占用不再无限增长

      【讨论】:

        猜你喜欢
        • 2018-02-18
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 2020-08-11
        • 2020-10-31
        • 1970-01-01
        • 2017-12-16
        • 2018-04-03
        相关资源
        最近更新 更多