Использование TraceEventSession в приложении ServiceFabric вызывает недостаточную ошибку ресурса
У меня есть приложение фабрики с полным состоянием обслуживания, работающее в кластере. У меня около 20 приложений с полным состоянием, работающих в одном кластере. Я использовал TraceEventSession для целей корреляции. В моем кластере 10 узлов. При развертывании приложения я вижу активную сессию TPL в системном мониторе. Когда число приложений, развернутых в кластере, увеличилось, я начал получать указанную ошибку
Недостаточно системных ресурсов для завершения запрашиваемой услуги. (Исключение из HRESULT: 0x800705AA)
System.Runtime.InteropServices.COMException (0x800705AA): недостаточно системных ресурсов для завершения запрошенной службы. (Исключение из HRESULT: 0x800705AA) в System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) в Microsoft.Diagnostics.Tracing.Session.TraceEventSession.EnableProvider(параметры провайдера GuidEventEenseEventEenseEventEventEeceE64EeceEeceEeceEeceEeE) TestApp.Service.Program.Main() в C:\Agent_work\12\s\TestApp\TestApp.Service\Program.cs: строка 61
это код, который я написал в program.cs, чтобы включить сеанс TPL
session = new TraceEventSession("TestApp_TplSession");
session.EnableProvider(TplEtwProviderTraceEventParser.ProviderGuid, TraceEventLevel.Verbose,
(ulong)TplEtwProviderTraceEventParser.Keywords.TasksFlowActivityIds);
session.EnableProvider(ServiceEventSource.Current.Name);
Я не уверен, сколько приложений с полным сервисом будет развернуто в одном кластере. Как я избавлюсь от этой ошибки??
1 ответ
Windows имеет ограничение в 64 сеанса ETW, которые могут выполняться одновременно. Рассмотрите возможность использования одного приложения без сохранения состояния на каждом узле для создания одного сеанса.