【问题标题】:conhost.exe seemingly leaking memoryconhost.exe 似乎在泄漏内存
【发布时间】:2021-09-14 14:42:49
【问题描述】:

我有一个在 IIS 中运行的 .NET Framework ASP.NET 应用程序。应用程序启动了一个长期存在的子进程,但在其他方面不起眼(只有一个端点可以有效地将请求代理到子进程)。

当系统处理请求时,机器上 conhost.exe 的内存使用量稳步上升(~线性增长);大约一天后,它将消耗 0.5-1 GB。每隔 29 小时,IIS 应用程序池会自动回收一次;此时,conhost 使用量回落到零,但随后又开始稳定增长。

什么会导致 conhost 使用这么多内存?

更新:

我看到Console.BufferWidthConsole.BufferHeight 的设置会导致conhost.exe 中更多的内存使用。因此,我为这些值添加了日志记录。但是,我的应用显示了一个恒定的小缓冲区宽度和高度。

更新:

根据@simon-mourier 的评论,我们提取了附加到 conhost 进程的 dll。都在 System32 中。列表是:conhost、ntdll、kernel32、kernelbase、msvcrt、Conhostv2、combase、ucrtbase、RPCRT4、bcryptPrimitives、GDI32、gdi32full、USER32、win32u、IMM32、OLEAUT32、msvcp_win、PROPSYS、sechost、shcore、SHELL32、cfgmgr32、windows。存储、powerprof、advapi32、shlwapi、kernel.appcore 和 profapi。

更新:

似乎与ASP.NET Core ILogger Memory Leak on Windows 10 (1607) / Windows Server 2016 相似(如果不相同)。不幸的是,这也缺乏答案。

【问题讨论】:

  • 您的 ASP.NET 应用程序是否创建任何子进程(通常使用 Process.Start(),但还有其他方法)?它作为子进程生成的可执行文件是否恰好是控制台应用程序?
  • @BenVoigt 是的,子进程产生的是一个控制台应用程序。
  • @BenVoigt 关于为什么会导致 conhost.exe 泄漏的任何理论?子进程本身似乎没有泄漏内存。
  • 您可以检查附加到此 conhost.exe 进程的 dll(例如使用 sysinternals 的 Process Explorer 工具),看看是否有任何可疑之处(第 3 方 dll 等)
  • @ChaseMedallion 抱歉回复晚了,我发布了如何解决我遇到的问题的答案:stackoverflow.com/a/68577179/779506 操作系统版本确实相关,因此如果您的问题仅发生在 Server 2016 上,这可能是相关。

标签: .net windows memory-leaks console


【解决方案1】:

这原来是一个 Windows 操作系统错误。我们就该问题联系了 Microsoft 支持并收到了一个补丁(可能与 @sky 在 stackoverflow.com/a/68577179/779506 中提到的补丁相同)。

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2023-03-05
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多