- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL; 博士
我现在很确定在 Windows 10(版本 1607)和 Windows Server 2016 中的 conhost 进程中存在内存泄漏,这在 Windows Server 2012 R2 中没有,并且在 Windows 10(版本 1809+)中得到修复,并且视窗服务器 2019。
我找不到对该错误的任何官方引用,如果有人可以为我指出这一点,我将不胜感激。
很长的故事
我目前正在调查我们(自托管)ASP.NET Core 应用程序中的内存泄漏,这导致内存使用率过高,而不是 .exe 本身,而是相应的“conhost”进程。这只会发生在所有生产服务器/虚拟机上,运行与我的笔记本电脑(或任何开发笔记本电脑)相同的应用程序 不是 产生内存泄漏。
开发机器(现在运行 > 2 小时):
生产服务器(运行约 10 分钟):
该内存将无限堆积,直到服务器内存耗尽。
这就是我用来复制它的代码(再次:在我们的生产系统上,而不是在开发机器上)。在我们的实际应用程序中,实际上是 EFCore 日志记录导致了问题(EFCore 也使用 ASP.NET Core 日志记录器):
public class LoggingBackgroundService : BackgroundService
{
private readonly ILogger<LoggingBackgroundService> logger;
public LoggingBackgroundService(ILogger<LoggingBackgroundService> logger)
{
this.logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
for (var i = 0; i < 10; i++)
{
Task.Run(() => RunBackgroundThread(stoppingToken));
}
await Task.Delay(Timeout.Infinite, stoppingToken);
}
private async Task RunBackgroundThread(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
for (var i = 0; i < 1000; i++)
{
logger.LogInformation(GetLogMessage());
//Console.WriteLine(GetLogMessage());
}
await Task.Delay(1000);
}
}
private string GetLogMessage()
{
return DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.ffff");
}
}
使用
Console.WriteLine()
而不是记录器工作并且不会产生内存泄漏。再一次,该代码在开发机器上运行良好。
LeakTrack+13277
ConhostV2!MergeAttrStrings+b8
ConhostV2!WriteCharsLegacy+a9c
ConhostV2!DoSrvWriteConsole+4ea
ConhostV2!ConsoleIoThread+36b
kernel32!BaseThreadInitThunk+14
ntdll!RtlUserThreadStart+21
我对虚拟机只有基本的了解,但目前看起来它只发生在 VMWare ESX (?) 系统中?我不再认为 VMWare 是导致问题的原因,而是被不同的 Windows 10 版本/内部版本误导了。
最佳答案
我向 Microsoft 报告了此错误,此后已修复。
... 2021 年 5 月 Windows Server 2016 更新 :
2021 年 5 月的 Windows Server 2016 更新 (KB5003197) 中包含一个修复程序,但隐藏在功能标志后面。激活它
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Policies\Microsoft\FeatureManagement\Overrides /v 1402424459 /t REG_DWORD /d 1 /f
关于c# - Windows 10 (1607)/Windows Server 2016 上的 ASP.NET Core ILogger 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63063591/
我有记录到 Microsoft.Extensions.Logging.ILogger 的代码(主要是扩展方法)。 我已将 Serilog 配置为实际进行日志记录。 我找不到将 Serilog.ILog
这可能与Pass ILogger or ILoggerFactory to constructors in AspNet Core?有点关系,但是这是专门针对库设计的,而不是关于使用这些库的实际应用程
我一直在尝试将 .net core 库项目引用到我的 Azure 函数项目中,以调用 .net core 类库中定义的进程之一。 .net core 库项目使用 ILogger。 但是,每当我尝试运行
如果类 T 包含对 ILogger 的依赖,则依赖关系已解决: public class Foo { private ILogger _logger; public Foo(ILogg
我已经将 vs 2019 用于控制台应用程序(dotnet core 3.1), Install-Package Microsoft.Extensions.Logging.Console -Versi
使用Microsoft.ApplicationInsights.AspNetCore v2.6.1使用 .net core v2.2.2,我可以看到 Azure Application Insight
我正在尝试在我的 Azure 函数中使用 Serilog.ILogger。我正在设置它,以便我可以添加自定义属性。当我尝试运行 Azure 函数时,会弹出控制台窗口并显示以下错误: [2021-03-
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
这更像是一个架构问题:您是使用 ILogger(并通过 DI 将其传递到构造函数中)还是更喜欢静态类 Log? 我们经常使用 ILogger,但它似乎确实使代码困惑,尤其是当它通过构造函数传递时。如果
我是第 3 方服务的 C# 开源包装器的作者。我需要公开一个 ILogger 工具(例如 https://logging.apache.org/log4net/release/sdk/log4net.
我正在使用 NLog (v2.0) 试用 Ninject 的日志记录扩展 (v3.0),根据我的阅读,我不应该配置任何东西,就像auto-神奇的,我需要做的就是在需要的地方声明一个ILogger 依赖
当我尝试使用 ILogger.LogInformation() 输出带有货币格式说明符的数值时,我得到了一个不同于我使用 Console.Log(string.Format( ))。后者显示预期的美元
我正在未来项目的原型(prototype)中使用 Durable Azure Function。 基本上,我有一个由启动 Orchestrator 的 HTTP POST 请求触发的客户端 Azure
我有一个函数应用程序(版本 2.0)并尝试记录异常的堆栈跟踪。 try { processedOrder = await orderProcessin
请参阅Log unhandled exceptions to custom logger在github上。显然 Up to Preview 2 Blazor 通过 Console.WriteLine
我有一个 ASP.NET Core 2 Web 应用程序正在部署到生产环境,需要启用日志来解决错误。我无法在文档中的任何地方找到 appsettings.json 的记录器部分中的架构。这是我在那里的
我正在实现一个自定义的 Microsoft.Extensions.Logging.ILogger (和 ILoggerProvider。我想检索当前的身份,但我真的不知道,因为我无法注入(inject
我有一个 azure 功能,它可以毫无问题地记录信息。 namespace aspnetcore_azurefun_blob { [StorageAccount("AzureWebJobsSt
我有一个服务,它执行一些 REST API 调用,并且我在 API 调用之前和之后进行自定义日志记录: _logger.LogTrace("Invoked API {ApiName}", new {
我是一名优秀的程序员,十分优秀!