【问题标题】:TraceEventSession usage in ServiceFabric application raises insufficient resource errorServiceFabric 应用程序中的 TraceEventSession 使用引发资源不足错误
【发布时间】:2016-10-13 01:48:30
【问题描述】:

我有一个在集群中运行的状态完整的服务结构应用程序。我有大约 20 个状态完整的应用程序在同一个集群中运行。我已将 TraceEventSession 用于关联目的。我的集群有 10 个节点。当我部署应用程序时,我能够看到 TPL 会话在性能监视器中处于活动状态。当集群中部署的应用程序数量增加时,我开始收到指定的错误

系统资源不足,无法完成请求的服务。 (HRESULT 异常:0x800705AA)

System.Runtime.InteropServices.COMException (0x800705AA):不足 系统资源存在以完成请求的服务。 (例外 从 HRESULT:0x800705AA)在 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 错误代码,IntPtr 错误信息)在 Microsoft.Diagnostics.Tracing.Session.TraceEventSession.EnableProvider(Guid providerGuid, TraceEventLevel providerLevel, UInt64 matchAnyKeywords, TraceEventProviderOptions 选项)在 TestApp.Service.Program.Main() 在 C:\Agent_work\12\s\TestApp\TestApp.Service\Program.cs:line 61

这是我在 program.cs 中编写的用于启用 tpl 会话的代码

session = new TraceEventSession("TestApp_TplSession");  
session.EnableProvider(TplEtwProviderTraceEventParser.ProviderGuid, TraceEventLevel.Verbose,
                        (ulong)TplEtwProviderTraceEventParser.Keywords.TasksFlowActivityIds);

session.EnableProvider(ServiceEventSource.Current.Name);

我不确定在同一个集群中将部署多少个状态全服务应用程序。我将如何摆脱这个错误?

【问题讨论】:

    标签: c# azure-service-fabric etw


    【解决方案1】:

    Windows 限制可以同时运行 64 个 ETW 会话。考虑使用在每个节点上运行的单个无状态应用来创建单个会话。

    【讨论】:

    • 那么你的意思是集群中部署的所有其他应用程序都应该使用无状态会话创建的会话,以便可以利用大部分内存??
    • 我正在监控我的应用程序中的相关性以跟踪请求流。你能告诉我activityId和relativeActivityId是否会针对不同的请求重复吗??
    • 对于它的价值,即使在运行单个侦听器时我也注意到了这一点,例如PerfView 或 Visual Studio 的诊断事件窗口。他们似乎并不总是在自己之后清理,所以最终需要重新启动才能开始一个新的会话。从上面的代码来看,至少 TraceEventSession 是 IDisposable 并且应该被释放。由于 ETW 是机器范围的,我认为 Matt 的建议是运行一个带有 ETW 侦听器的附加无状态服务,该侦听器从节点获取所有事件并将它们推送到某个地方。考虑为此使用 Microsoft 诊断事件流。
    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 2015-01-21
    • 2016-07-17
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多