使用nuget的最新Google.Cloud.Logging.V2包,1.0.0
我发送日志的功能:
private static void WriteLogEntry(string message, Google.Cloud.Logging.Type.LogSeverity severity)
{
string threadName = System.Threading.Thread.CurrentThread.Name;
if (string.IsNullOrEmpty(threadName))
{
threadName = System.Threading.Thread.CurrentThread.ManagedThreadId.ToString();
}
LogEntry logEntry = new LogEntry
{
LogName = logName.ToString(),
Severity = severity,
TextPayload = string.Format("[{0}]: {1}", threadName, message)
};
CloudLogClient.WriteLogEntriesAsync(LogResource, Monitor, EntryLabels, new[] { logEntry });
}
进行压力测试,使用此功能从40个线程发送~50 log / sec / thread。该测试大量泄漏内存,大约100MB / 10分钟的运行时间与禁用测试相比。
通过Google.Cloud.Logging.Log4Net软件包时也会发生此问题。
任何关于如何进一步缩小范围的建议都将受到赞赏。是否有可用于云日志包的源代码可以检查以查找内存泄漏的来源?
答案 0 :(得分:0)
我建议您检查通过NuGet添加的依赖项的版本,因为较新的版本修复了过去导致内存泄漏的一些问题。
如果您使用的是早于1.7.0的Grpc.Core,则会出现C#取消令牌注册未注册的问题,从而导致内存泄漏,如here所示。更高版本的Grpc.Core修复了这个问题,因此您可以尝试使用更新版本的Grpc.Core,它可以在NuGet包管理器中找到。
此外,您可以将Log4Net appender更新到最新版本(2.2.0),该版本也可以在NuGet包管理器中找到。一旦更新了依赖项,就可以再试一次,检查是否存在内存泄漏。