【问题标题】:Replica had multiple failures in API call: IStatelessServiceInstance.Open()副本在 API 调用中有多个失败:IStatelessServiceInstance.Open()
【发布时间】:2017-02-14 03:07:01
【问题描述】:

我遇到了 Service Fabric Explorer 中的以下异常:

Unhealthy event: SourceId='System.RA', Property='ReplicaOpenStatus', HealthState='Warning', ConsiderWarningAsError=false.
Replica had multiple failures in API call: IStatelessServiceInstance.Open(); Error = System.Reflection.TargetInvocationException (-2146232828)
Exception has been thrown by the target of an invocation.
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
   at FRSecure.AssessmentDesigner.Web.WebHostBuilderHelper.GetWebHost(IWebHostBuilder webHostBuilder, String protocol, String port, String environment) in D:\a\1\s\web_assessmentdesigner\WebHostBuilderHelper.cs:line 16
   at web_assessmentdesigner.WebHostingService.Microsoft.ServiceFabric.Services.Communication.Runtime.ICommunicationListener.OpenAsync(CancellationToken cancellationToken) in D:\a\1\s\web_assessmentdesigner\WebHostingService.cs:line 75
   at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.d__13.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.d__0.MoveNext()

这是我所知道的:

  1. 应用在本地集群上安装和运行良好,但在 Azure 上却不行。
  2. App 由无状态 API 和有状态服务组成。有状态服务启动良好。大约 2 分钟后,无状态者进入失败状态。

我的问题是:如何或在哪里可以获得有关潜在异常的更多信息?该服务在启动之前就失败了,因此我的日志记录尚不可用。我在门户上的诊断中看不到任何内容。当无法在本地复制此类问题时,解决此类问题的最佳方法是什么?

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    如果您已启用事件提供程序 Microsoft-ServiceFabric (Guid = "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8") 将事件发送到诊断,那么您应该能够看到一些与此相关的事件,调用您的 WebHostBuilderHelper 的类 StatelessServiceInstanceAdapter 应该当遇到上述异常时发出一个类似Got exception when opening communication listeners - XXX 的事件,这可能包含有关您的服务失败原因的更多信息。

    您也可以简单地将您的 WebHostBuilderHelper.GetWebHost(...) 实现包装在 try/catch 中,并将捕获到的任何异常记录到您的 ServiceEventSource。当服务尝试打开监听器时会发生异常,但从上面不清楚原因。

    【讨论】:

    • 在我看来,诊断是解决此问题的正确工具,因此很高兴您确认了这一点。我认为诊断的设置一定有问题。我有你提到的提供者。我是否应该在门户中看到某些内容:监视器-> 诊断日志?我已更新我的模板以支持使用此处提供的信息进行诊断:docs.microsoft.com/en-us/azure/service-fabric/…
    • 如果您为cbd93bc2-71e5-4566-b3a7-595d8eeca6e8 添加了EtwManifestProviderConfiguration,那么您应该会在诊断中看到这些事件。如果您怀疑您的诊断设置有问题,您可以尝试在 Visual Studio 中为您的集群启用流式跟踪,然后在重新部署服务时查看其中一个节点,看看您是否可以捕获事件,并希望异常附在上面的信息。
    • 我意识到诊断存储表中存储了日志信息。出于某种原因,我期待它会出现在门户网站的“诊断”中。通过连接到远程集群,我能够从 Visual Studio 查看存储表。
    • 是的,这也是一种查看方式,所有通过 VM 扩展发送的事件都在此处结束。您是否为集群启用了 Log Analytics for Service Fabric?正确设置它有点棘手,但是一旦运行它就可以很好地发现问题......您是否在日志中发现了问题?
    • 是的,当无状态服务启动并设置对 sql 数据库的身份验证时,原来是网络连接问题。当您看到实际问题时,很容易解决...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2023-02-08
    • 2022-10-01
    • 2017-03-04
    相关资源
    最近更新 更多