![](/img/trans.png)
[英]CPU usage not maximized and high synchronization in server app relying on async/await
[英]Serilog async high CPU usage upto 100%
我使用 Serilog 异步日志记录,在对多个用户进行性能测试时,我们发现 serilog 占用了所有 CPU(高达 100%)。 ASP.net 代码使用 Serilog Async(log.info、log.warning、log.error)创建日志文件,并且由于安全日志记录要求,它已登录所有 web 页面。 CPU 使用率在 2 小时后达到峰值,并且持续保持 100%,系统性能受到重大影响。
我们还测试了未启用 SeriLog 的应用程序,该应用程序的 CPU 使用率不会达到 100%。
如果我在这里得到任何帮助,我将不胜感激。 如果需要,我可以共享我创建的代码(记录器类)。
以及如何配置日志记录:
var logConfig = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Async(logSink =>
{
logSink.File(
logFilePath,
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: null,
outputTemplate: OutputTemplate,
hooks: new HeaderWriter(header),
flushToDiskInterval: TimeSpan.FromSeconds(10),
shared: true
);
});
Log.Logger = logConfig.CreateLogger();
关于进一步调查 Serilog 性能的一些想法:
Serilog.Debugging.SelfLog.Enable(Console.Error);
// Don't:
Log.Information("The time is " + DateTime.Now);
// Do:
Log.Information("The time is {Now}", DateTime.Now);
如果您记录大字符串,请将它们记录为属性以防止解析和缓存。
Task
, Stream
等// Don't
// Destructuring entire Request with @ will generate a lot of useless data
Log.Information("Got request {@HttpRequest}", HttpContext.Request);
如果要记录此类复杂对象,请定义Destructure.ByTransforming()或 IDestructuringPolicy。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.